You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/04/21 06:27:57 UTC

[causeway] branch CAUSEWAY-2485 updated (17a5c38b36 -> 9e2c1ef437)

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

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


    from 17a5c38b36 CAUSEWAY-2485: simplifies @Property#mustSatisfy
     add c797759ed9 Bump spring-boot-starter-parent from 2.7.10 to 2.7.11
     add 18d7bd12a0 Merge pull request #1596 from apache/dependabot/maven/master/org.springframework.boot-spring-boot-starter-parent-2.7.11
     add 84f95f4a39 Bump spring-boot.version from 2.7.10 to 2.7.11
     add e679e1b9d7 Merge pull request #1597 from apache/dependabot/maven/master/spring-boot.version-2.7.11
     add 339941c9eb Bump spring-boot-maven-plugin from 2.7.10 to 2.7.11
     add 5ca0e191e4 Merge pull request #1598 from apache/dependabot/maven/master/org.springframework.boot-spring-boot-maven-plugin-2.7.11
     new bc733dca7c CAUSEWAY-2485: wip on @Property#optionality
     new e2870c0e73 CAUSEWAY-2485: reworks @Property#optionality
     new 9e2c1ef437 CAUSEWAY-2485: wip for @Property#projecting

The 3 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:
 bom/pom.xml                                        |   4 +-
 .../domain/properties/Property/PropertyMenu.java   |   7 +-
 .../OptionalityOptionalMetaAnnotation.java         |  43 ---------
 .../PropertyOptionalityPage-description.adoc       | 104 ++++++++++-----------
 .../optionality/PropertyOptionalityPage.java       |  60 ++++--------
 .../optionality/PropertyOptionalityPage.layout.xml |  11 ++-
 ...> PropertyOptionalityPage_updateMandatory.java} |  21 ++---
 ...=> PropertyOptionalityPage_updateNullable.java} |  28 +++---
 ...=> PropertyOptionalityPage_updateOptional.java} |  20 ++--
 ...ityPage_updateWithMetaAnnotationOverridden.java |  62 ------------
 .../PropertyProjectingPage-description.adoc        |  58 +++---------
 .../properties/Property/projecting/diag.adoc       |  40 +++++---
 .../snapshot/PropertySnapshotPage-description.adoc |   2 +-
 .../PropertyLayoutCssClassPage-description.adoc    |  10 +-
 .../PropertyLayoutRenderDayPage-description.adoc   |  12 +--
 .../PropertyLayoutRepaintingPage-description.adoc  |   4 +-
 ...ropertyLayoutTypicalLengthPage-description.adoc |  12 +--
 .../{publishing => projecting}/uml-class-diag.png  | Bin
 starters/pom.xml                                   |   4 +-
 19 files changed, 167 insertions(+), 335 deletions(-)
 delete mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/OptionalityOptionalMetaAnnotation.java
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/{PropertyOptionalityPage_updateMandatoryWithParameterLayout.java => PropertyOptionalityPage_updateMandatory.java} (75%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/{PropertyOptionalityPage_updateWithMetaAnnotation.java => PropertyOptionalityPage_updateNullable.java} (69%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/{PropertyOptionalityPage_updateWithParameterLayout.java => PropertyOptionalityPage_updateOptional.java} (77%)
 delete mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithMetaAnnotationOverridden.java
 copy antora/components/refguide-index/modules/testing/pages/index/specsupport/applib/integration/ObjectFactoryForIntegration.adoc => examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/diag.adoc (56%)
 rename examples/demo/domain/src/main/resources/static/demoapp/dom/annotDomain/Property/{publishing => projecting}/uml-class-diag.png (100%)


[causeway] 03/03: CAUSEWAY-2485: wip for @Property#projecting

Posted by da...@apache.org.
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 9e2c1ef43733941c184782a324cb5f552c26ebc5
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Apr 21 07:27:49 2023 +0100

    CAUSEWAY-2485: wip for @Property#projecting
---
 .../PropertyOptionalityPage-description.adoc       |   2 +-
 .../PropertyProjectingPage-description.adoc        |  58 +++++----------------
 .../properties/Property/projecting/diag.adoc       |  34 ++++++++++++
 .../{publishing => projecting}/uml-class-diag.png  | Bin
 4 files changed, 48 insertions(+), 46 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
index 3cd64bd04b..50d3b03325 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
@@ -1,6 +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 `optionality` attribute specifies that a property or parameter is either optional or mandatory:
+The link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Property.html#optionality[@Property#optionality]  attribute specifies that a property or parameter is either optional or mandatory:
 
 * for properties, the attribute can be specified using the `@Property` annotation
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingPage-description.adoc
index 3a39570f3a..13922dd0a5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingPage-description.adoc
@@ -2,58 +2,23 @@
 
 When a collection of entities are rendered by the viewer, the table will by default have one column for every property that is not otherwise universally hidden (eg using `@Property(hidden = Where.ALL_TABLES`).
 
-Sometimes though the columns to be shown will vary depending upon the use case with which the entity is being interacted.
-One way to fine-tune the columns shown is to implement the `TableColumnOrderService` SPI.
-An alternative is to define a view model as a projection of that entity, and return a collection of that view model instead.
-However, this view model requires the end-user to have to click first to the view model, and then to the backing entity instance that it wraps.
-The `projecting` attribute allows this extra hop to be eliminated.
+Sometimes though the columns to be shown will depend upon the context in which the entity is being interacted.
+One common approach is to define a view model as a projection of the entity, and return a collection of that view model instead.
+However, if the user wants to access the entity they must first navigate to the view model, and from their navigate to the backing entity instance that it wraps.
 
-The `projecting` attribute can only be used on a view model, and only on a single property of that view model,  and that property must return a reference to an entity (the backing entity).
+The purpose of the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Property.html#projecting[@Property#projecting] attribute is to eliminate this extra hop.
 
-Rather than render links to the view model, the viewer instead renders links directly to the entity.
+The idea is that the `projecting` attribute is placed on the property of the view model that references the backing entity.
+With this hint, the viewer instead renders links to the entity rather than the view model.
+From the end-user's perspectice, they aren't aware that a view model is in use at all.
 
-== Demo Domain
+== How this demo works
 
 The diagram below shows how the domain objects of the demo app are related:
 
-ifndef::dev-mode[]
-image::/demoapp/dom/annotDomain/Property/publishing/uml-class-diag.png[]
-endif::dev-mode[]
+// see diag.adoc
 
-ifdef::dev-mode[]
-[plantuml,property-projecting-uml-class-diag,png]
-----
-@startuml(id=Commons)
-
-hide empty members
-skinparam {
-  shadowing false
-  arrowFontSize 10
-  defaultTextAlignment center
-  wrapWidth 200
-  maxMessageSize 100
-}
-hide stereotype
-skinparam rectangle<<2>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-
-class PropertyPublishingVm {
-}
-class PropertyPublishingChildVm {
-}
-class PropertyPublishingChildJdo {
-}
-
-PropertyPublishingVm -r-> "1" PropertyPublishingChildVm : firstChild
-PropertyPublishingVm -r-> "1..*" PropertyPublishingChildVm : children
-PropertyPublishingChildVm -d-> PropertyPublishingChildJdo : backingEntity
-
-@enduml
-----
-endif::dev-mode[]
+image::/demoapp/dom/annotDomain/Property/projecting/uml-class-diag.png[]
 
 The property from `PropertyPublishingChildVm` to `PropertyPublishingChildJdo` is annotated as a projecting property:
 
@@ -89,3 +54,6 @@ As it isn't possible to access the projection view model at all, there's little
 
 
 
+== Related Services
+
+An alternative way to fine-tune the columns shown is to implement the link:https://causeway.apache.org/refguide/2.0.0-RC1/applib/index/services/tablecol/TableColumnOrderService.html[TableColumnOrderService] or link:https://causeway.apache.org/refguide/2.0.0-RC1/applib/index/services/tablecol/TableColumnVisibilityService.html[TableColumnVisibilityService] SPIs.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/diag.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/diag.adoc
new file mode 100644
index 0000000000..e4dda0e29a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/diag.adoc
@@ -0,0 +1,34 @@
+: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 [...]
+
+[plantuml,uml-class-diag,png]
+----
+@startuml(id=Commons)
+
+hide empty members
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+
+class PropertyPublishingVm {
+}
+class PropertyPublishingChildVm {
+}
+class PropertyPublishingChildJdo {
+}
+
+PropertyPublishingVm -r-> "1" PropertyPublishingChildVm : firstChild
+PropertyPublishingVm -r-> "1..*" PropertyPublishingChildVm : children
+PropertyPublishingChildVm -d-> PropertyPublishingChildJdo : backingEntity
+
+@enduml
+----
diff --git a/examples/demo/domain/src/main/resources/static/demoapp/dom/annotDomain/Property/publishing/uml-class-diag.png b/examples/demo/domain/src/main/resources/static/demoapp/dom/annotDomain/Property/projecting/uml-class-diag.png
similarity index 100%
rename from examples/demo/domain/src/main/resources/static/demoapp/dom/annotDomain/Property/publishing/uml-class-diag.png
rename to examples/demo/domain/src/main/resources/static/demoapp/dom/annotDomain/Property/projecting/uml-class-diag.png


[causeway] 02/03: CAUSEWAY-2485: reworks @Property#optionality

Posted by da...@apache.org.
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 e2870c0e735e4ab0ac50c71037869514bbdeafa9
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Apr 21 07:15:04 2023 +0100

    CAUSEWAY-2485: reworks @Property#optionality
---
 .../PropertyOptionalityPage-description.adoc       | 80 +++++++++++++++++-----
 .../optionality/PropertyOptionalityPage.java       | 11 ++-
 2 files changed, 69 insertions(+), 22 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
index 6573bb41c1..3cd64bd04b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
@@ -1,7 +1,5 @@
 :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 [...]
 
-CAUTION: TODO: can also use `@Nullable`, for parameters at least.
-
 The `optionality` attribute specifies that a property or parameter is either optional or mandatory:
 
 * for properties, the attribute can be specified using the `@Property` annotation
@@ -10,36 +8,86 @@ The `optionality` attribute specifies that a property or parameter is either opt
 
 Without an annotation, the framework assumes that the property or parameter is mandatory, ie required.
 
-[IMPORTANT]
-====
-In addition to specifying optionality at the framework level, it's also important to specify optionality for properties at the persistence layer.
-
-* in the case of entities persisted using JDO/DataNucleus, this can be done using `@Column(allowsNull=...)`.
-* in the case of view models serialized using JAXB, this can be done using `@XmlElement(required=...)`.
+The framework also recognises `@org.springframework.lang.Nullable`, and with entities will recognise JPA's `@javax.persistence.Column#nullable` or JDO's `@javax.jdo.annotations.Column#allowsNull`.
 
-Also note that JDO and JAXB assume a property is not required by default, whereas Apache Causeway assumes that properties are required by default.
-====
 
+== How this demo works
 
-== Annotated
+This page defines three properties, all of which can be edited directly.
+Each also has a corresponding action to update them.
+The three properties are annotated with different optionalities, and the action parameters has a corresponding optionality.
 
-The `optionality` attribute can be specified explicitly using an annotation:
+When editing/modifying, you should be able to leave the two properties that are optional as blank, but the mandatory property will require a value to be set.
 
-* for properties, using `@Property#optionality()`:
+* the `optionalProperty` is annotated using `@Property#optionality()`:
 +
 [source,java,indent=0]
+.PropertyOptionalityPage.java
 ----
-include::PropertyOptionalityPage.java[tags=annotation]
+include::PropertyOptionalityPage.java[tags=optional]
 ----
 <.> explicitly specifies that the property is optional
++
+and its corresponding action's parameter uses `@Parameter#optionality()`:
++
+[source,java,indent=0]
+.PropertyOptionalityPage_updateOptional.java
+----
+include::PropertyOptionalityPage_updateOptional.java[tags=annotation]
+----
+<.> explicitly specifies that the parameter is optional
 
-* for parameters, using `@Parameter#optionality()`:
+
+* the `mandatoryProperty` is also annotated using `@Property#optionality()`:
 +
 [source,java,indent=0]
+.PropertyOptionalityPage.java
+----
+include::PropertyOptionalityPage.java[tags=mandatory]
+----
+<.> indicates that the property is mandatory
++
+and its corresponding action's parameter also uses `@Parameter#optionality()`:
++
+[source,java,indent=0]
+.PropertyOptionalityPage_updateMandatory.java
 ----
 include::PropertyOptionalityPage_updateMandatory.java[tags=annotation]
 ----
 <.> explicitly specifies that the parameter is optional
 
-The annotation could also be applied to a mixin, but would have little effect because mixin properties are always read-only.
+* the `nullableProperty` is also annotated using `@Nullable`:
++
+[source,java,indent=0]
+.PropertyOptionalityPage.java
+----
+include::PropertyOptionalityPage.java[tags=nullable]
+----
+<.> indicates that the property is optional
++
+and its corresponding action's parameter also uses `@Nullable`:
++
+[source,java,indent=0]
+.PropertyOptionalityPage_updateNullable.java
+----
+include::PropertyOptionalityPage_updateNullable.java[tags=annotation]
+----
+<.> explicitly specifies that the parameter is optional
+
+
+
+
+== Persistence Annotations
+
+In addition to specifying optionality at the framework level, it's also important to specify optionality for properties at the persistence layer.
+
+* for JPA, this is done using `@Column(nullable=...)`.
+* for JDO, this is done using `@Column(allowsNull=...)`.
+* for JAXB view models, this is done using `@XmlElement(required=...)`.
+
+If using JPA or JDO entities, the framework will infer the optionality semantics automatically.
+
+WARNING: link:https://issues.apache.org/jira/browse/CAUSEWAY-3437[CAUSEWAY-3437] is to extend the framework to infer optionality from these JPA/JDO/JAXB equivalents.
+
+Be aware that JPA, JDO and JAXB all assume a property is not required by default, whereas Apache Causeway assumes that properties are required by default.
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java
index 8706fabdde..36b3fa8275 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java
@@ -45,11 +45,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo.PropertyOptionalityVm")
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        editing = Editing.ENABLED)
-public class PropertyOptionalityPage implements HasAsciiDocDescription {
+@Named("demo.PropertyOptionalityPage")
+@DomainObject(nature=Nature.VIEW_MODEL) public class PropertyOptionalityPage implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
@@ -59,6 +56,7 @@ public class PropertyOptionalityPage implements HasAsciiDocDescription {
 
 //tag::optional[]
     @Property(
+        editing = Editing.ENABLED,
         optionality = Optionality.OPTIONAL              // <.>
     )
     @XmlElement(required = false)
@@ -68,6 +66,7 @@ public class PropertyOptionalityPage implements HasAsciiDocDescription {
 
 //tag::mandatory[]
     @Property(
+        editing = Editing.ENABLED,
         optionality = Optionality.MANDATORY             // <.>
     )
     @XmlElement(required = true)
@@ -77,7 +76,7 @@ public class PropertyOptionalityPage implements HasAsciiDocDescription {
 
 //tag::nullable[]
     // <.>
-    @Property()
+    @Property(editing = Editing.ENABLED)
     @org.springframework.lang.Nullable                  // <.>
     @XmlElement(required = false)
     @Getter @Setter


[causeway] 01/03: CAUSEWAY-2485: wip on @Property#optionality

Posted by da...@apache.org.
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 bc733dca7c0c95eb19da54b13a3d3f2bf9db94f5
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Apr 20 07:24:40 2023 +0100

    CAUSEWAY-2485: wip on @Property#optionality
---
 .../domain/properties/Property/PropertyMenu.java   |  7 ++-
 .../OptionalityOptionalMetaAnnotation.java         | 43 ---------------
 .../PropertyOptionalityPage-description.adoc       | 56 +------------------
 .../optionality/PropertyOptionalityPage.java       | 49 +++++------------
 .../optionality/PropertyOptionalityPage.layout.xml | 11 ++--
 ...> PropertyOptionalityPage_updateMandatory.java} | 21 +++-----
 ...=> PropertyOptionalityPage_updateNullable.java} | 28 ++++------
 ...=> PropertyOptionalityPage_updateOptional.java} | 20 +++----
 ...ityPage_updateWithMetaAnnotationOverridden.java | 62 ----------------------
 .../snapshot/PropertySnapshotPage-description.adoc |  2 +-
 .../PropertyLayoutCssClassPage-description.adoc    | 10 ++--
 .../PropertyLayoutRenderDayPage-description.adoc   | 12 ++---
 .../PropertyLayoutRepaintingPage-description.adoc  |  4 +-
 ...ropertyLayoutTypicalLengthPage-description.adoc | 12 ++---
 14 files changed, 68 insertions(+), 269 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/PropertyMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/PropertyMenu.java
index 795588030d..534d9988a4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/PropertyMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/PropertyMenu.java
@@ -118,10 +118,9 @@ public class PropertyMenu {
     @ActionLayout(cssClassFa="fa-infinity", describedAs = "Regular expressions, such as email")
     public PropertyOptionalityPage optionality(){
         val vm = new PropertyOptionalityPage();
-        vm.setPropertyUsingAnnotation(null);
-        vm.setMandatoryPropertyUsingAnnotation("mandatory");
-        vm.setPropertyUsingMetaAnnotation(null);
-        vm.setPropertyUsingMetaAnnotationButOverridden("mandatory");
+        vm.setOptionalProperty(null);
+        vm.setMandatoryProperty("mandatory");
+        vm.setNullableProperty(null);
         return vm;
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/OptionalityOptionalMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/OptionalityOptionalMetaAnnotation.java
deleted file mode 100644
index 129d24ff34..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/OptionalityOptionalMetaAnnotation.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  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.
- */
-package demoapp.dom.domain.properties.Property.optionality;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.apache.causeway.applib.annotation.Optionality;
-import org.apache.causeway.applib.annotation.Parameter;
-import org.apache.causeway.applib.annotation.Property;
-
-//tag::class[]
-@Property(optionality = Optionality.OPTIONAL)       // <.>
-@Parameter(optionality = Optionality.OPTIONAL)      // <.>
-@Inherited
-@Target({
-        ElementType.METHOD, ElementType.FIELD,      // <.>
-        ElementType.PARAMETER,                      // <.>
-})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface OptionalityOptionalMetaAnnotation {
-
-}
-//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
index dcebc08415..6573bb41c1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage-description.adoc
@@ -37,63 +37,9 @@ include::PropertyOptionalityPage.java[tags=annotation]
 +
 [source,java,indent=0]
 ----
-include::PropertyOptionalityVm_updateWithParameterLayout.java[tags=annotation]
+include::PropertyOptionalityPage_updateMandatory.java[tags=annotation]
 ----
 <.> explicitly specifies that the parameter is optional
 
 The annotation could also be applied to a mixin, but would have little effect because mixin properties are always read-only.
 
-== Meta-annotated
-
-The `optionality` attribute can also be specified using a custom meta-annotation:
-
-* the meta-annotation is defined as:
-+
-[source,java]
-----
-include::OptionalityOptionalMetaAnnotation.java[tags=class]
-----
-<.> annotated for a property ...
-<.> \... and for a parameter.
-<.> annotation can be applied to a property (either its getter or the field directly)
-<.> annotation can be applied to a parameter
-
-* and can be applied to a property:
-+
-[source,java,indent=0]
-----
-include::PropertyOptionalityPage.java[tags=meta-annotated]
-----
-<.> semantic is inherited from the meta-annotation
-
-* or can be applied to a parameter:
-+
-[source,java,indent=0]
-----
-include::PropertyOptionalityVm_updateWithMetaAnnotation.java[tags=meta-annotation]
-----
-<.> semantic is inherited from the meta-annotation
-
-
-=== Meta-annotated Overridden
-
-The meta-annotation can itself be overridden:
-
-* in a property:
-+
-[source,java,indent=0]
-----
-include::PropertyOptionalityPage.java[tags=meta-annotated-overridden]
-----
-<.> semantic from meta-annotation ...
-<.> \... is overridden by the `@Property` annotation
-
-* or a parameter:
-+
-[source,java,indent=0]
-----
-include::PropertyOptionalityVm_updateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
-----
-<.> semantic from meta-annotation ...
-<.> \... is overridden by the `@Parameter` annotation
-
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java
index 0c4051f88a..8706fabdde 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.java
@@ -19,6 +19,7 @@
 package demoapp.dom.domain.properties.Property.optionality;
 
 import javax.inject.Named;
+import javax.validation.constraints.Null;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -33,6 +34,8 @@ import org.apache.causeway.applib.annotation.Optionality;
 import org.apache.causeway.applib.annotation.Property;
 import org.apache.causeway.applib.annotation.PropertyLayout;
 
+import org.springframework.lang.Nullable;
+
 import lombok.Getter;
 import lombok.Setter;
 
@@ -54,57 +57,33 @@ public class PropertyOptionalityPage implements HasAsciiDocDescription {
         return "@Property#optionality";
     }
 
-//tag::annotation[]
+//tag::optional[]
     @Property(
         optionality = Optionality.OPTIONAL              // <.>
     )
-    @PropertyLayout(
-        describedAs =
-            "@Property(optionality = OPTIONAL)",
-        fieldSetId = "annotation", sequence = "1")
     @XmlElement(required = false)
     @Getter @Setter
-    private String propertyUsingAnnotation;
-//end::annotation[]
+    private String optionalProperty;
+//end::optional[]
 
-//tag::annotation-mandatory[]
+//tag::mandatory[]
     @Property(
         optionality = Optionality.MANDATORY             // <.>
     )
-    @PropertyLayout(
-        describedAs =
-            "@Property(optionality = MANDATORY)",
-        fieldSetId = "annotation", sequence = "2")
     @XmlElement(required = true)
     @Getter @Setter
-    private String mandatoryPropertyUsingAnnotation;
-//end::annotation-mandatory[]
+    private String mandatoryProperty;
+//end::mandatory[]
 
-//tag::meta-annotated[]
-    @OptionalityOptionalMetaAnnotation                  // <.>
+//tag::nullable[]
+    // <.>
     @Property()
-    @PropertyLayout(
-        describedAs = "@OptionalityOptionalMetaAnnotation",
-        fieldSetId = "meta-annotated", sequence = "1")
+    @org.springframework.lang.Nullable                  // <.>
     @XmlElement(required = false)
     @Getter @Setter
-    private String propertyUsingMetaAnnotation;
-//end::meta-annotated[]
+    private String nullableProperty;
+//end::nullable[]
 
-//tag::meta-annotated-overridden[]
-    @OptionalityOptionalMetaAnnotation                  // <.>
-    @Property(
-        optionality = Optionality.MANDATORY             // <.>
-    )
-    @PropertyLayout(
-        describedAs =
-            "@OptionalityOptionalMetaAnnotation " +
-            "@PropertyLayout(optionality = MANDATORY)",
-        fieldSetId = "meta-annotated-overridden", sequence = "1")
-    @XmlElement(required = true)
-    @Getter @Setter
-    private String propertyUsingMetaAnnotationButOverridden;
-//end::meta-annotated-overridden[]
 
 //tag::class[]
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.layout.xml
index d4c5e45b80..ebe4a6b6ae 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage.layout.xml
@@ -9,7 +9,7 @@
 	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. -->
-1<bs3:grid
+<bs3:grid
         xsi:schemaLocation="https://causeway.apache.org/applib/layout/component https://causeway.apache.org/applib/layout/component/component.xsd   https://causeway.apache.org/applib/layout/grid/bootstrap3 https://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
         xmlns:bs3="https://causeway.apache.org/applib/layout/grid/bootstrap3"
         xmlns:cpt="https://causeway.apache.org/applib/layout/component"
@@ -26,10 +26,11 @@
 
 	<bs3:row>
 		<bs3:col span="6">
-			<cpt:fieldSet name="Annotated" id="annotation"/>
-			<cpt:fieldSet name="Contributed" id="contributed"/>
-			<cpt:fieldSet name="Meta-annotated" id="meta-annotated"/>
-			<cpt:fieldSet name="Meta-annotated Overridden" id="meta-annotated-overridden"/>
+			<cpt:fieldSet name="General" id="general">
+                <cpt:property id="optionalProperty"/>
+                <cpt:property id="mandatoryProperty"/>
+                <cpt:property id="nullableProperty"/>
+            </cpt:fieldSet>
 			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
 		</bs3:col>
 		<bs3:col span="6">
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateMandatoryWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateMandatory.java
similarity index 75%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateMandatoryWithParameterLayout.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateMandatory.java
index e7a017ba39..b0147043bb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateMandatoryWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateMandatory.java
@@ -28,14 +28,10 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
 
-@Action(
-    semantics = SemanticsOf.IDEMPOTENT
-)
-@ActionLayout(
-    associateWith = "mandatoryPropertyUsingAnnotation"
-    , sequence = "1")
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(associateWith = "mandatoryProperty", sequence = "1")
 @RequiredArgsConstructor
-public class PropertyOptionalityPage_updateMandatoryWithParameterLayout {
+public class PropertyOptionalityPage_updateMandatory {
 
     private final PropertyOptionalityPage page;
 
@@ -44,17 +40,14 @@ public class PropertyOptionalityPage_updateMandatoryWithParameterLayout {
             @Parameter(
                 optionality = Optionality.MANDATORY             // <.>
             )
-            @ParameterLayout(
-                describedAs =
-                    "@Parameter(optionality = MANDATORY)"
-            )
-            final String mandatoryParameterUsingAnnotation) {
-        page.setMandatoryPropertyUsingAnnotation(mandatoryParameterUsingAnnotation);
+            final String mandatoryParameter) {
+        page.setMandatoryProperty(mandatoryParameter);
         return page;
     }
 //end::annotation[]
+
     @MemberSupport public String default0Act() {
-        return page.getMandatoryPropertyUsingAnnotation();
+        return page.getMandatoryProperty();
     }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateNullable.java
similarity index 69%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithMetaAnnotation.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateNullable.java
index 704dbd3628..153d24825d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateNullable.java
@@ -26,33 +26,27 @@ import org.apache.causeway.applib.annotation.Parameter;
 import org.apache.causeway.applib.annotation.ParameterLayout;
 import org.apache.causeway.applib.annotation.SemanticsOf;
 
+import org.springframework.lang.Nullable;
+
 import lombok.RequiredArgsConstructor;
 
-@Action(
-    semantics = SemanticsOf.IDEMPOTENT
-)
-@ActionLayout(
-    associateWith = "propertyUsingMetaAnnotation"
-    , sequence = "1")
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(associateWith = "nullableProperty", sequence = "1")
 @RequiredArgsConstructor
-public class PropertyOptionalityPage_updateWithMetaAnnotation {
+public class PropertyOptionalityPage_updateNullable {
 
     private final PropertyOptionalityPage page;
 
-//tag::meta-annotation[]
+//tag::annotation[]
     @MemberSupport public PropertyOptionalityPage act(
-            @OptionalityOptionalMetaAnnotation                            // <.>
-            @Parameter(optionality = Optionality.OPTIONAL)
-            @ParameterLayout(
-                describedAs = "@OptionalityOptionalMetaAnnotation"
-            )
-            final String parameterUsingMetaAnnotation) {
-        page.setPropertyUsingMetaAnnotation(parameterUsingMetaAnnotation);
+            @org.springframework.lang.Nullable      // <.>
+            final String nullableParameter) {
+        page.setNullableProperty(nullableParameter);
         return page;
     }
-//end::meta-annotation[]
+//end::annotation[]
     @MemberSupport public String default0Act() {
-        return page.getPropertyUsingMetaAnnotation();
+        return page.getNullableProperty();
     }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateOptional.java
similarity index 77%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithParameterLayout.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateOptional.java
index a74a3edb34..4ef3a7ed50 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateOptional.java
@@ -28,14 +28,10 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
 
-@Action(
-    semantics = SemanticsOf.IDEMPOTENT
-)
-@ActionLayout(
-    associateWith = "propertyUsingAnnotation"
-    , sequence = "1")
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(associateWith = "optionalProperty", sequence = "1")
 @RequiredArgsConstructor
-public class PropertyOptionalityPage_updateWithParameterLayout {
+public class PropertyOptionalityPage_updateOptional {
 
     private final PropertyOptionalityPage page;
 
@@ -44,17 +40,13 @@ public class PropertyOptionalityPage_updateWithParameterLayout {
             @Parameter(
                 optionality = Optionality.OPTIONAL
             )
-            @ParameterLayout(
-                describedAs =
-                    "@Parameter(optionality = OPTIONAL)"
-            )
-            final String parameterUsingAnnotation) {
-        page.setPropertyUsingAnnotation(parameterUsingAnnotation);
+            final String optionalParameter) {
+        page.setOptionalProperty(optionalParameter);
         return page;
     }
 //end::annotation[]
     @MemberSupport public String default0Act() {
-        return page.getPropertyUsingAnnotation();
+        return page.getOptionalProperty();
     }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithMetaAnnotationOverridden.java
deleted file mode 100644
index 205045aded..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityPage_updateWithMetaAnnotationOverridden.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *  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.
- */
-package demoapp.dom.domain.properties.Property.optionality;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.Optionality;
-import org.apache.causeway.applib.annotation.Parameter;
-import org.apache.causeway.applib.annotation.ParameterLayout;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-@Action(
-    semantics = SemanticsOf.IDEMPOTENT
-)
-@ActionLayout(
-    associateWith = "propertyUsingMetaAnnotationButOverridden"
-    , sequence = "1")
-@RequiredArgsConstructor
-public class PropertyOptionalityPage_updateWithMetaAnnotationOverridden {
-
-    private final PropertyOptionalityPage page;
-
-//tag::meta-annotation-overridden[]
-    @MemberSupport public PropertyOptionalityPage act(
-            @OptionalityOptionalMetaAnnotation                  // <.>
-            @Parameter(
-                optionality = Optionality.MANDATORY             // <.>
-            )
-            @ParameterLayout(
-                describedAs =
-                    "@OptionalityOptionalMetaAnnotation " +
-                    "@ParameterLayout(optionality = MANDATORY)"
-            )
-            final String parameterUsingMetaAnnotationButOverridden) {
-        page.setPropertyUsingMetaAnnotationButOverridden(parameterUsingMetaAnnotationButOverridden);
-        return page;
-    }
-//end::meta-annotation-overridden[]
-    @MemberSupport public String default0Act() {
-        return page.getPropertyUsingMetaAnnotationButOverridden();
-    }
-
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotPage-description.adoc
index 7795934585..4217926f11 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotPage-description.adoc
@@ -80,7 +80,7 @@ The `takeSnapshot` mixin action shows how the `XmlSnapshotService` service is us
 
 [source,java,indent=0]
 ----
-include::PropertySnapshotVm_takeXmlSnapshot.java[tags=class]
+include::PropertySnapshotPage_takeXmlSnapshot.java[tags=class]
 ----
 
 The resultant XML snapshot is:
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassPage-description.adoc
index 81bd47155e..9555f20125 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassPage-description.adoc
@@ -24,7 +24,7 @@ include::PropertyLayoutCssClassPage.java[tags=annotation]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutCssClassVm_updateWithParameterLayout.java[tags=annotation]
+include::PropertyLayoutCssClassPage_updateWithParameterLayout.java[tags=annotation]
 ----
 <.> explicitly specifies the CSS class to apply to the parameter `<div>`
 
@@ -91,7 +91,7 @@ include::PropertyLayoutCssClassPage.java[tags=meta-annotated]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutCssClassVm_updateWithMetaAnnotation.java[tags=meta-annotation]
+include::PropertyLayoutCssClassPage_updateWithMetaAnnotation.java[tags=meta-annotation]
 ----
 <.> hint is inherited from the meta-annotation
 
@@ -99,7 +99,7 @@ include::PropertyLayoutCssClassVm_updateWithMetaAnnotation.java[tags=meta-annota
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutCssClassVm_mixinPropertyWithMetaAnnotation.java[tags=class]
+include::PropertyLayoutCssClassPage_mixinPropertyWithMetaAnnotation.java[tags=class]
 ----
 <.> hint is inherited from the meta-annotation
 
@@ -120,7 +120,7 @@ include::PropertyLayoutCssClassPage.java[tags=meta-annotated-overridden]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
+include::PropertyLayoutCssClassPage_updateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
 ----
 <.> hint from meta-annotation ...
 <.> \... is overridden by the `@ParameterLayout` annotation
@@ -130,7 +130,7 @@ include::PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden.java[tags=m
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutCssClassVm_mixinPropertyWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
+include::PropertyLayoutCssClassPage_mixinPropertyWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
 ----
 <.> hint from meta-annotation ...
 <.> \... is overridden by the `@PropertyLayout` annotation
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayPage-description.adoc
index 0e6e4cb09f..401c792ec6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayPage-description.adoc
@@ -42,7 +42,7 @@ include::PropertyLayoutRenderDayPage.java[tags=render-as-day-before]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutRenderDayVm_updateEndDateWithParameterLayout.java[tags=annotation]
+include::PropertyLayoutRenderDayPage_updateEndDateWithParameterLayout.java[tags=annotation]
 ----
 <.> explicitly specifies that the parameter should be rendered as the day before.
 
@@ -75,7 +75,7 @@ The `@PropertyLayout` can also be applied at the class-level to mixin properties
 
 [source,java,indent=0]
 ----
-include::PropertyLayoutRenderDayVm_mixinEndDateWithPropertyLayout.java[tags=class]
+include::PropertyLayoutRenderDayPage_mixinEndDateWithPropertyLayout.java[tags=class]
 ----
 <.> explicitly specifies that the contributed property should be rendered as the day before
 
@@ -106,7 +106,7 @@ include::PropertyLayoutRenderDayPage.java[tags=meta-annotation]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation.java[tags=meta-annotation]
+include::PropertyLayoutRenderDayPage_updateEndDateWithMetaAnnotation.java[tags=meta-annotation]
 ----
 <.> hint is inherited from the meta-annotation
 
@@ -114,7 +114,7 @@ include::PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation.java[tags=met
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutRenderDayVm_mixinEndDateWithMetaAnnotation.java[tags=class]
+include::PropertyLayoutRenderDayPage_mixinEndDateWithMetaAnnotation.java[tags=class]
 ----
 <.> hint is inherited from the meta-annotation
 
@@ -135,7 +135,7 @@ include::PropertyLayoutRenderDayPage.java[tags=meta-annotation-overridden]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
+include::PropertyLayoutRenderDayPage_updateEndDateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
 ----
 <.> hint from meta-annotation (deliberately incorrectly annotated) ...
 <.> \... is overridden by the `@ParameterLayout` annotation
@@ -145,7 +145,7 @@ include::PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden.jav
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutRenderDayVm_mixinEndDateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
+include::PropertyLayoutRenderDayPage_mixinEndDateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
 ----
 <.> hint from meta-annotation (deliberately incorrectly annotated) ...
 <.> \... is overridden by the `@PropertyLayout` annotation
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingPage-description.adoc
index 5e2e11145c..2ed9b11343 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingPage-description.adoc
@@ -85,7 +85,7 @@ include::PropertyLayoutRepaintingPage.java[tags=meta-annotated]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutRepaintingVm_mixinPropertyWithMetaAnnotation.java[tags=class]
+include::PropertyLayoutRepaintingPage_mixinPropertyWithMetaAnnotation.java[tags=class]
 ----
 <.> hint is inherited from the meta-annotation
 
@@ -107,7 +107,7 @@ include::PropertyLayoutRepaintingPage.java[tags=meta-annotated-overridden]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutRepaintingVm_mixinPropertyWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
+include::PropertyLayoutRepaintingPage_mixinPropertyWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
 ----
 <.> hint from meta-annotation ...
 <.> \... is overridden by the `@PropertyLayout` annotation
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthPage-description.adoc
index 54b2763832..c25e45a9ac 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthPage-description.adoc
@@ -34,7 +34,7 @@ include::PropertyLayoutTypicalLengthPage.java[tags=annotation]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutTypicalLengthVm_updateWithParameterLayout.java[tags=annotation]
+include::PropertyLayoutTypicalLengthPage_updateWithParameterLayout.java[tags=annotation]
 ----
 <.> explicitly specifies that the parameter should use a textbox
 
@@ -69,7 +69,7 @@ The `@PropertyLayout` can also be applied at the class-level to mixin properties
 
 [source,java,indent=0]
 ----
-include::PropertyLayoutTypicalLengthVm_mixinProperty.java[tags=class]
+include::PropertyLayoutTypicalLengthPage_mixinProperty.java[tags=class]
 ----
 <.> explicitly specifies that the contributed property should use a textbox
 
@@ -101,7 +101,7 @@ include::PropertyLayoutTypicalLengthPage.java[tags=meta-annotated]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation.java[tags=meta-annotation]
+include::PropertyLayoutTypicalLengthPage_updateWithMetaAnnotation.java[tags=meta-annotation]
 ----
 <.> hint is inherited from the meta-annotation
 
@@ -109,7 +109,7 @@ include::PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation.java[tags=meta-a
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutTypicalLengthVm_mixinPropertyWithMetaAnnotation.java[tags=class]
+include::PropertyLayoutTypicalLengthPage_mixinPropertyWithMetaAnnotation.java[tags=class]
 ----
 <.> hint is inherited from the meta-annotation
 
@@ -130,7 +130,7 @@ include::PropertyLayoutTypicalLengthPage.java[tags=meta-annotated-overridden]
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
+include::PropertyLayoutTypicalLengthPage_updateWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
 ----
 <.> hint from meta-annotation ...
 <.> \... is overridden by the `@ParameterLayout` annotation
@@ -140,7 +140,7 @@ include::PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden.java[t
 +
 [source,java,indent=0]
 ----
-include::PropertyLayoutTypicalLengthVm_mixinPropertyWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
+include::PropertyLayoutTypicalLengthPage_mixinPropertyWithMetaAnnotationOverridden.java[tags=meta-annotation-overridden]
 ----
 <.> hint from meta-annotation ...
 <.> \... is overridden by the `@PropertyLayout` annotation