This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 26e2aefa57 CAUSEWAY-2485: reworks @ActionLayout#sequence
26e2aefa57 is described below
commit 26e2aefa571de81c8a5475d028060a303bbcb536
Author: danhaywood <[email protected]>
AuthorDate: Tue Apr 18 07:24:00 2023 +0100
CAUSEWAY-2485: reworks @ActionLayout#sequence
---
.../named/ActionLayoutNamedPage-description.adoc | 3 +-
.../ActionLayoutPromptStylePage-description.adoc | 14 ++
.../ActionLayoutSequencePage-description.adoc | 179 ++++++++++++++++++++-
.../sequence/ActionLayoutSequencePage.java | 64 ++++----
.../sequence/ActionLayoutSequencePage.layout.xml | 30 ++--
.../ActionLayoutSequencePage_addChild.java | 51 ++++++
.../ActionLayoutSequencePage_noopSeqX.java | 50 ++++++
.../ActionLayoutSequencePage_noopSeqY.java | 50 ++++++
.../ActionLayoutSequencePage_removeChild.java | 56 +++++++
...Page_updateNamePositionedPanelDropDownSeqX.java | 51 ++++++
...Page_updateNamePositionedPanelDropDownSeqY.java | 51 ++++++
...SequencePage_updateNamePositionedPanelSeqX.java | 51 ++++++
...SequencePage_updateNamePositionedPanelSeqY.java | 51 ++++++
...SequencePage_updateNamePositionedRightSeqX.java | 51 ++++++
...SequencePage_updateNamePositionedRightSeqY.java | 51 ++++++
.../ActionLayoutSequencePage_updateNameSeqX.java | 50 ++++++
.../ActionLayoutSequencePage_updateNameSeqY.java | 50 ++++++
.../ActionLayoutSequencePage_updateNameSeqZ.java | 50 ++++++
.../ActionLayoutSequenceChildVm-description.adoc} | 13 +-
.../child/ActionLayoutSequenceChildVm.java | 58 +++++++
.../ActionLayoutSequenceChildVm.layout.xml} | 20 +--
21 files changed, 958 insertions(+), 86 deletions(-)
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/named/ActionLayoutNamedPage-description.adoc
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/named/ActionLayoutNamedPage-description.adoc
index 01139f3ad2..cf392c2c26 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/named/ActionLayoutNamedPage-description.adoc
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/named/ActionLayoutNamedPage-description.adoc
@@ -45,8 +45,7 @@ Instead of using `@ActionLayout#named`, it is also possible
to specify a name in
...
----
-One advantage of using the `.layout.xml` file is that changes can be picked up
without having to restart the application.
-On the other hand, including descriptions can make that file rather large.
+The main advantage of using the `.layout.xml` file is that changes can be
picked up without having to restart the application.
=== Alternatives
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStylePage-description.adoc
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStylePage-description.adoc
index 981dce9e6f..4fb031a744 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStylePage-description.adoc
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStylePage-description.adoc
@@ -67,3 +67,17 @@ causeway:
----
NOTE: For both of these configuration properties, note that the two other
variants (`inline` and `inline-as-if-edit`) are not available.
+
+=== .layout.xml
+
+Instead of using `@ActionLayout#promptStyle`, it is also possible to specify a
name in the
link:https://causeway.apache.org/userguide/2.0.0-RC1/fun/ui.html#by-example[.layout.xml]
file:
+
+[source,xml]
+.Xxx.layout.xml
+----
+...
+<action id="updateName" promptStyle="MODAL"/>
+...
+----
+
+The main advantage of using the `.layout.xml` file is that changes can be
picked up without having to restart the application.
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage-description.adoc
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage-description.adoc
index 25f385d6f5..c660a46a43 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage-description.adoc
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage-description.adoc
@@ -1,14 +1,181 @@
: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 `sequence` attribute governs the order of this member relative to other
members in the same (layout) group,
-given in Dewey-decimal notation.
+It's common to lay out a domain objects' members using the
`@ActionLayout#associateWith` element, which places an action's button close to
a property or collection.
+If there are more than one such action associated with an object, then the
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/ActionLayout.html#sequence[@ActionLayout#sequence]
element can additionally be used to specify the order of those action buttons.
+The value of the `sequence` element is a string, interpreted as a
Dewey-decimal value, meaning:
+
+ "1" < "1.0" < "1.1" < "1.1.1" < "1.1.2" < "1.2" < "1.3" < "2"
+
+=== How this demo works
+
+This page has a `name` property and a `children` collection, and then has a
number of actions associated with these members.
+In the case of the `name` property, its associated action are positioned in
various locations (using `@ActionLayout#position`).
+
+In all cases, the `@ActionLayout#sequence` is used to specify the order.
+This order is chosen to be the opposite of the alphabetic ordering of the
action's identifier (eg `updateNameSeqZ` is ordered before `updateNameSeqY`).
+
+==== Positioned below property
+
+There are three actions associated with the `name` property and positioned
below:
+
+* first:
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNameSeqZ.java
+----
+include::ActionLayoutSequencePage_updateNameSeqZ.java[tags=class]
+----
+<.> associated with the `name` property
+<.> rendered first in the UI
+
+* second:
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNameSeqY.java
+----
+include::ActionLayoutSequencePage_updateNameSeqY.java[tags=class]
+----
+<.> rendered second; "1" < "2"
+
+* third:
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNameSeqX.java
+----
+include::ActionLayoutSequencePage_updateNameSeqX.java[tags=class]
+----
+<.> rendered third; "2" < "3"
+
+==== Positioned to the right of the property
+
+There are two actions positioned to the right of the `name` property:
+
+* first
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNamePositionedRightSeqY.java
+----
+include::ActionLayoutSequencePage_updateNamePositionedRightSeqY.java[tags=class]
+----
+<.> uses Dewey format
+<.> positioned to the right
+
+* second
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNamePositionedRightSeqX.java
+----
+include::ActionLayoutSequencePage_updateNamePositionedRightSeqX.java[tags=class]
+----
+<.> uses Dewey format; "1.2" < "1.2.1"
+
+==== Positioned on panel
+
+Two further actions positioned on the panel:
+
+* first
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNamePositionedPanelSeqY.java
+----
+include::ActionLayoutSequencePage_updateNamePositionedPanelSeqY.java[tags=class]
+----
+<.> positioned on the panel
+
+* second
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNamePositionedPanelSeqX.java
+----
+include::ActionLayoutSequencePage_updateNamePositionedPanelSeqX.java[tags=class]
+----
+<.> uses Dewey format, "1" < "1.0"
+
+==== Positioned on panel drop-down
+
+Finally there are two actions associated with `name` that are rendered on the
panel drop-down:
+
+* first
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqY.java
+----
+include::ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqY.java[tags=class]
+----
+<.> position on the panel drop down
+
+* second
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqX.java
+----
+include::ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqX.java[tags=class]
+----
+<.> uses Dewey format; "1.0" < "1.1"
+
+==== For Collection
+
+There are also two actions associated with the `children` collection:
+
+* first:
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_addChild.java
+----
+include::ActionLayoutSequencePage_addChild.java[tags=class]
+----
+<.> associated with the `children` collection
+
+* second:
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_addChild.java
+----
+include::ActionLayoutSequencePage_removeChild.java[tags=class]
+----
+
+==== Top-level actions
+
+Lastly there are two actions that are not associated with any object members.
+Because of the presence of the "unreferencedActions" attribute in the
`.layout.xml`, these are rendered at the top, by the object header:
+
+[source,xml]
+.layout.xml
+----
+...
+<bs3:col span="10" unreferencedActions="true">
+ <cpt:domainObject />
+</bs3:col>
+...
+----
+
+The top-level actions are:
+
+* first:
++
[source,java,indent=0]
+.ActionLayoutSequencePage_noopSeqY.java
+----
+include::ActionLayoutSequencePage_noopSeqY.java[tags=class]
----
-include::ActionLayoutSequencePage.java[tags=act1and2]
++
+Note there is no "associateWith" element
+
+* second:
++
+[source,java,indent=0]
+.ActionLayoutSequencePage_noopSeqX.java
----
+include::ActionLayoutSequencePage_noopSeqX.java[tags=class]
+----
+
+
+=== .layout.xml
+
+Instead of using `@ActionLayout#associateWith` and `@ActionLayout#sequence`,
it is also possible to specify a all of these semantics using the
link:https://causeway.apache.org/userguide/2.0.0-RC1/fun/ui.html#by-example[.layout.xml]
file.
-<.> applies dewey ordinal `'1.0'` and in effect renders this action before the
other
-<.> applies dewey ordinal `'2.0'` and in effect renders this action after the
other
+The main advantage of using the `.layout.xml` file is that changes can be
picked up without having to restart the application.
-An alternative is to use a `Xxx.layout.xml` file, where 'Xxx' is the domain
object name.
+It is also possible to mix-and-match.
+Some people like to use `.layout.xml` to position properties into fieldsets
and collections into columns or tabs, but to use `@ActionLayout#associateWith`
and `@ActionLayout#sequence` to associate those actions with the properties and
collections.
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.java
index abdc3ce609..79b6c65365 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.java
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.java
@@ -18,56 +18,60 @@
*/
package demoapp.dom.domain.actions.ActionLayout.sequence;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.inject.Named;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.Collection;
import org.apache.causeway.applib.annotation.DomainObject;
import org.apache.causeway.applib.annotation.Nature;
import org.apache.causeway.applib.annotation.ObjectSupport;
+import org.apache.causeway.applib.annotation.Property;
+
+import lombok.Getter;
+import lombok.Setter;
import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-//tag::class[]
-@DomainObject(
- nature=Nature.VIEW_MODEL)
-@Named("demo.ActionLayoutSequenceVm")
+import
demoapp.dom.domain.actions.ActionLayout.sequence.child.ActionLayoutSequenceChildVm;
+
+@Named("demo.ActionLayoutSequencePage")
+@DomainObject(nature=Nature.VIEW_MODEL)
@XmlRootElement(name = "root")
-@XmlType
+@XmlType()
@XmlAccessorType(XmlAccessType.FIELD)
-public class ActionLayoutSequencePage implements HasAsciiDocDescription {
+//tag::class[]
+// ...
+public class ActionLayoutSequencePage
+//end::class[]
+ implements HasAsciiDocDescription
+//tag::class[]
+{
+ @Property
+ @XmlElement
+ @Getter @Setter
+ private String name;
- @ObjectSupport public String title() {
- return "@ActionLayout#sequence";
- }
+ @Collection()
+ @XmlElement
+ @Getter
+ private List<ActionLayoutSequenceChildVm> children = new ArrayList<>();
-//tag::act1and2[]
- @Action
- @ActionLayout(
- sequence = "1.0" // <.>
-//end::act1and2[]
- ,describedAs = "@ActionLayout(sequence = \"1.0\")"
-//tag::act1and2[]
- )
- public Object actFirst(final String arg) {
- return this;
- }
+ // ...
+//end::class[]
- @Action
- @ActionLayout(
- sequence = "2.0" // <.>
-//end::act1and2[]
- ,describedAs = "@ActionLayout(sequence = \"2.0\")"
-//tag::act1and2[]
- )
- public Object actSecond(final String arg) {
- return this;
+ @ObjectSupport public String title() {
+ return "@ActionLayout#sequence";
}
-//end::act1and2[]
+//tag::class[]
}
//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.layout.xml
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.layout.xml
index b7b4ab6651..c37b5eb907 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.layout.xml
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.layout.xml
@@ -26,25 +26,19 @@
<bs3:row>
<bs3:col span="6">
- <cpt:fieldSet name="General" id="general"/>
- <cpt:fieldSet name="Annotated" id="annotated"/>
- <cpt:fieldSet name="Layout" id="layout">
- <cpt:action id="layoutPanel" position="PANEL">
- <cpt:named>Positioned on
panel</cpt:named>
- </cpt:action>
- <cpt:action id="layoutPanelDropDown"
position="PANEL_DROPDOWN">
- <cpt:named>Positioned on panel in drop
down</cpt:named>
- </cpt:action>
- <cpt:property id="readOnlyProperty2">
- <cpt:action id="layoutBelow"
position="BELOW">
- <cpt:named>Positioned
below</cpt:named>
- </cpt:action>
- <cpt:action id="layoutRight"
position="RIGHT">
- <cpt:named>Positioned
right</cpt:named>
- </cpt:action>
- </cpt:property>
- </cpt:fieldSet>
+ <bs3:row>
+ <bs3:col span="12">
+ <cpt:fieldSet name="General"
id="general">
+ <cpt:property id="name"/>
+ </cpt:fieldSet>
<cpt:fieldSet name="Other" id="other"
unreferencedProperties="true"/>
+ </bs3:col>
+ </bs3:row>
+ <bs3:row>
+ <bs3:col span="12">
+ <cpt:collection id="children"/>
+ </bs3:col>
+ </bs3:row>
</bs3:col>
<bs3:col span="6">
<cpt:fieldSet name="Description" id="description" >
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_addChild.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_addChild.java
new file mode 100644
index 0000000000..3adc69a5f6
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_addChild.java
@@ -0,0 +1,51 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import
demoapp.dom.domain.actions.ActionLayout.associateWith.child.ActionLayoutAssociateWithChildVm;
+
+import
demoapp.dom.domain.actions.ActionLayout.sequence.child.ActionLayoutSequenceChildVm;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "children", // <.>
+ sequence = "1"
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_addChild {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.getChildren().add(new ActionLayoutSequenceChildVm(newValue));
+ return page;
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_noopSeqX.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_noopSeqX.java
new file mode 100644
index 0000000000..c2fc78c182
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_noopSeqX.java
@@ -0,0 +1,50 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+import javax.inject.Inject;
+
+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.SemanticsOf;
+import org.apache.causeway.applib.services.message.MessageService;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ sequence = "1.1"
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_noopSeqX {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act() {
+ messageService.informUser("This action is a no-op");
+ return page;
+ }
+
+ @Inject MessageService messageService;
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_noopSeqY.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_noopSeqY.java
new file mode 100644
index 0000000000..bd595b496e
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_noopSeqY.java
@@ -0,0 +1,50 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+import javax.inject.Inject;
+
+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.SemanticsOf;
+import org.apache.causeway.applib.services.message.MessageService;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ sequence = "1"
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_noopSeqY {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act() {
+ messageService.informUser("This action is a no-op");
+ return page;
+ }
+
+ @Inject MessageService messageService;
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_removeChild.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_removeChild.java
new file mode 100644
index 0000000000..e938b7bd5c
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_removeChild.java
@@ -0,0 +1,56 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+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.SemanticsOf;
+
+import
demoapp.dom.domain.actions.ActionLayout.associateWith.child.ActionLayoutAssociateWithChildVm;
+
+import
demoapp.dom.domain.actions.ActionLayout.sequence.child.ActionLayoutSequenceChildVm;
+
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "children",
+ sequence = "2"
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_removeChild {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final
ActionLayoutSequenceChildVm child) {
+ page.getChildren().removeIf(x ->
x.getValue().equals(child.getValue()));
+ return page;
+ }
+ @MemberSupport public List<ActionLayoutSequenceChildVm> choices0Act() {
+ return page.getChildren();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqX.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqX.java
new file mode 100644
index 0000000000..63fda8ea5c
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqX.java
@@ -0,0 +1,51 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "1.1", // <.>
+ position = ActionLayout.Position.PANEL_DROPDOWN
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqX {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqY.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqY.java
new file mode 100644
index 0000000000..fb41678547
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqY.java
@@ -0,0 +1,51 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "1.0",
+ position = ActionLayout.Position.PANEL_DROPDOWN // <.>
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNamePositionedPanelDropDownSeqY {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelSeqX.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelSeqX.java
new file mode 100644
index 0000000000..4ba20d382b
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelSeqX.java
@@ -0,0 +1,51 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "1.0", // <.>
+ position = ActionLayout.Position.PANEL
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNamePositionedPanelSeqX {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelSeqY.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelSeqY.java
new file mode 100644
index 0000000000..e3f33ca5d1
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedPanelSeqY.java
@@ -0,0 +1,51 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+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.SemanticsOf;
+
+import lombok.RequiredArgsConstructor;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "1",
+ position = ActionLayout.Position.PANEL // <.>
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNamePositionedPanelSeqY {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedRightSeqX.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedRightSeqX.java
new file mode 100644
index 0000000000..a9fe420117
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedRightSeqX.java
@@ -0,0 +1,51 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "1.2.1", // <.>
+ position = ActionLayout.Position.RIGHT
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNamePositionedRightSeqX {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedRightSeqY.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedRightSeqY.java
new file mode 100644
index 0000000000..b34a5fe033
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNamePositionedRightSeqY.java
@@ -0,0 +1,51 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "1.2", // <.>
+ position = ActionLayout.Position.RIGHT // <.>
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNamePositionedRightSeqY {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqX.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqX.java
new file mode 100644
index 0000000000..235bc5b177
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqX.java
@@ -0,0 +1,50 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "3" // <.>
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNameSeqX {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqY.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqY.java
new file mode 100644
index 0000000000..5d052970e7
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqY.java
@@ -0,0 +1,50 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name",
+ sequence = "2" // <.>
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNameSeqY {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqZ.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqZ.java
new file mode 100644
index 0000000000..c4e7ce6545
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage_updateNameSeqZ.java
@@ -0,0 +1,50 @@
+/*
+ * 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.actions.ActionLayout.sequence;
+
+import lombok.RequiredArgsConstructor;
+
+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.SemanticsOf;
+
+//tag::class[]
+@Action(semantics = SemanticsOf.IDEMPOTENT)
+@ActionLayout(
+ associateWith = "name", // <.>
+ sequence = "1" // <.>
+)
+@RequiredArgsConstructor
+public class ActionLayoutSequencePage_updateNameSeqZ {
+ // ...
+//end::class[]
+ private final ActionLayoutSequencePage page;
+
+ @MemberSupport public ActionLayoutSequencePage act(final String newValue) {
+ page.setName(newValue);
+ return page;
+ }
+ @MemberSupport public String default0Act() {
+ return page.getName();
+ }
+
+//tag::class[]
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage-description.adoc
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm-description.adoc
similarity index 60%
copy from
examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage-description.adoc
copy to
examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm-description.adoc
index 25f385d6f5..bfbe31aec3 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage-description.adoc
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm-description.adoc
@@ -1,14 +1,3 @@
: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 `sequence` attribute governs the order of this member relative to other
members in the same (layout) group,
-given in Dewey-decimal notation.
-
-[source,java,indent=0]
-----
-include::ActionLayoutSequencePage.java[tags=act1and2]
-----
-
-<.> applies dewey ordinal `'1.0'` and in effect renders this action before the
other
-<.> applies dewey ordinal `'2.0'` and in effect renders this action after the
other
-
-An alternative is to use a `Xxx.layout.xml` file, where 'Xxx' is the domain
object name.
+This child object exists just to act as the element of the collections of the
`ActionLayoutAssociateWithPage` demo object.
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm.java
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm.java
new file mode 100644
index 0000000000..eaa916b5f8
--- /dev/null
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm.java
@@ -0,0 +1,58 @@
+/*
+ * 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.actions.ActionLayout.sequence.child;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import javax.inject.Named;
+import javax.xml.bind.annotation.*;
+
+import org.apache.causeway.applib.annotation.*;
+
+//tag::class[]
+@XmlRootElement(name = "child")
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionLayoutSequenceChildVm")
+@DomainObject(nature=Nature.VIEW_MODEL)
+@NoArgsConstructor
+public class ActionLayoutSequenceChildVm implements HasAsciiDocDescription {
+
+ public ActionLayoutSequenceChildVm(final String value) {
+ setValue(value);
+ }
+
+ @ObjectSupport public String title() {
+ return getValue();
+ }
+
+ @Property()
+ @PropertyLayout(fieldSetId = "annotation", sequence = "1")
+ @XmlElement(required = false)
+ @Getter @Setter
+ private String value;
+
+
+
+}
+//end::class[]
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.layout.xml
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm.layout.xml
similarity index 78%
copy from
examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.layout.xml
copy to
examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm.layout.xml
index b7b4ab6651..2441ccf9e7 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/ActionLayoutSequencePage.layout.xml
+++
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/sequence/child/ActionLayoutSequenceChildVm.layout.xml
@@ -15,6 +15,7 @@
xmlns:cpt="https://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 />
@@ -26,24 +27,7 @@
<bs3:row>
<bs3:col span="6">
- <cpt:fieldSet name="General" id="general"/>
- <cpt:fieldSet name="Annotated" id="annotated"/>
- <cpt:fieldSet name="Layout" id="layout">
- <cpt:action id="layoutPanel" position="PANEL">
- <cpt:named>Positioned on
panel</cpt:named>
- </cpt:action>
- <cpt:action id="layoutPanelDropDown"
position="PANEL_DROPDOWN">
- <cpt:named>Positioned on panel in drop
down</cpt:named>
- </cpt:action>
- <cpt:property id="readOnlyProperty2">
- <cpt:action id="layoutBelow"
position="BELOW">
- <cpt:named>Positioned
below</cpt:named>
- </cpt:action>
- <cpt:action id="layoutRight"
position="RIGHT">
- <cpt:named>Positioned
right</cpt:named>
- </cpt:action>
- </cpt:property>
- </cpt:fieldSet>
+ <cpt:fieldSet name="Annotation" id="variants"/>
<cpt:fieldSet name="Other" id="other"
unreferencedProperties="true"/>
</bs3:col>
<bs3:col span="6">