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
commit 0c626367dbd696a47644ef5ff96b3b339169fc82 Author: danhaywood <[email protected]> AuthorDate: Mon Apr 3 08:07:37 2023 +0100 CAUSEWAY-2485: updates @DomainObject#xxxDomainEvent --- .../DomainObjectXxxDomainEventPage-description.adoc | 9 ++++++--- .../DomainObjectXxxDomainEventPage.java | 20 ++++++++++---------- .../DomainObjectXxxDomainEventPage.layout.xml | 10 +++++++--- ...ObjectXxxDomainEventPage_updateTextViaMixin.java} | 2 +- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage-description.adoc index 7f436d8809..60ecdd5796 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage-description.adoc +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage-description.adoc @@ -35,14 +35,16 @@ include::DomainObjectXxxDomainEventPage.java[tags=class] <.> the collection domain event class to emit (if not annotated at the member level) <.> marker interface. All the domain event classes implement this interface, and the subscriber (see below) subscribes on this type -<.> the property can be edited directly (and can also be modified using a action (see below) +<.> the property can be edited directly +<.> the property can also be edited by this action. +The property can also be edited via a mixin action (see next) -* the mixin action to update the property +* the mixin action to update the property: + [source,java] .DomainObjectXxxDomainEventPage_updateText.java ---- -include::DomainObjectXxxDomainEventPage_updateText.java[tags=class] +include::DomainObjectXxxDomainEventPage_updateTextViaMixin.java[tags=class] ---- @@ -64,6 +66,7 @@ include::DomainObjectXxxDomainEventControlSubscriber.java[tags=class] ---- include::DomainObjectXxxDomainEventPage_changeControlStrategy.java[tags=class] ---- +<.> Emits its own domain event just so that it won't hide itself (!) * the different strategies: diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.java index c3e0ca9487..221d0ac2d4 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.java +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.java @@ -43,24 +43,24 @@ import org.apache.causeway.applib.events.domain.PropertyDomainEvent; //tag::class[] // ... @DomainObject( - actionDomainEvent = DomainObjectXxxDomainEventPage.ActionEvent.class, // <.> - propertyDomainEvent = DomainObjectXxxDomainEventPage.PropertyEvent.class, // <.> - collectionDomainEvent = DomainObjectXxxDomainEventPage.CollectionEvent.class, // <.> + actionDomainEvent = DomainObjectXxxDomainEventPage.ActionEvent.class, // <.> + propertyDomainEvent = DomainObjectXxxDomainEventPage.PropertyEvent.class, // <.> + collectionDomainEvent = DomainObjectXxxDomainEventPage.CollectionEvent.class, // <.> nature=Nature.VIEW_MODEL ) public class DomainObjectXxxDomainEventPage implements HasAsciiDocDescription { - public interface DomainEventMarker {} // <.> + public interface DomainEventMarker {} // <.> - public static class ActionEvent // <1> + public static class ActionEvent // <1> extends ActionDomainEvent<DomainObjectXxxDomainEventPage> implements DomainEventMarker {} - public static class PropertyEvent // <2> + public static class PropertyEvent // <2> extends PropertyDomainEvent<DomainObjectXxxDomainEventPage, Object> implements DomainEventMarker {} - public static class CollectionEvent // <3> + public static class CollectionEvent // <3> extends CollectionDomainEvent<DomainObjectXxxDomainEventPage, Object> implements DomainEventMarker {} // ... @@ -84,15 +84,15 @@ public class DomainObjectXxxDomainEventPage implements HasAsciiDocDescription { @Getter @Setter private String text; - public DomainObjectXxxDomainEventPage updateTextDirectly(String text) { + @Action(semantics = SemanticsOf.SAFE) + public DomainObjectXxxDomainEventPage updateTextDirectly(String text) { // <.> setText(text); return this; } - public String default0UpdateTextDirectly() { + @MemberSupport public String default0UpdateTextDirectly() { return getText(); } - @Collection @XmlElementWrapper(name = "children") @XmlElement(name = "child") diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.layout.xml index ad7315e077..6d701cb252 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.layout.xml +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage.layout.xml @@ -17,6 +17,13 @@ <bs3:row> <bs3:col span="10" unreferencedActions="true"> + <!-- have located these actions here rather than with the 'text' property, so can validate that they do correctly hide themselves --> + <cpt:action id="updateTextDirectly"> + <cpt:named>update text</cpt:named> + </cpt:action> + <cpt:action id="updateTextViaMixin"> + <cpt:named>update text (via mixin)</cpt:named> + </cpt:action> <cpt:domainObject /> </bs3:col> <bs3:col span="2"> @@ -30,9 +37,6 @@ <bs3:col span="12"> <cpt:fieldSet name="Object" id="object"> <cpt:property id="text"> - <cpt:action id="updateText"> - <cpt:named>update</cpt:named> - </cpt:action> </cpt:property> </cpt:fieldSet> </bs3:col> diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_updateTextMixin.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_updateTextViaMixin.java similarity index 95% rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_updateTextMixin.java rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_updateTextViaMixin.java index 637b77236c..38b6db8437 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_updateTextMixin.java +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_updateTextViaMixin.java @@ -27,7 +27,7 @@ import org.apache.causeway.applib.annotation.MemberSupport; //tag::class[] @Action() @RequiredArgsConstructor -public class DomainObjectXxxDomainEventPage_updateTextMixin { +public class DomainObjectXxxDomainEventPage_updateTextViaMixin { private final DomainObjectXxxDomainEventPage page;
