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 4c948af638fbb15594872402a26f2a9081f453a4 Author: danhaywood <[email protected]> AuthorDate: Tue Apr 11 09:18:10 2023 +0100 CAUSEWAY-2485: simplifies @Action#semantics --- .../hidden/ActionHiddenPage-description.adoc | 2 +- .../semantics/ActionSemanticsPage-description.adoc | 189 ++++----------------- .../Action/semantics/ActionSemanticsPage.java | 139 ++------------- .../semantics/ActionSemanticsPage.layout.xml | 36 +++- ...csPage_mixinIncrementByAmountNonIdempotent.java | 54 ------ ...onSemanticsPage_mixinIncrementNoAnnotation.java | 51 ------ ...nSemanticsPage_mixinIncrementNonIdempotent.java | 50 ------ ...Page_mixinIncrementNonIdempotentAreYouSure.java | 50 ------ ...csPage_mixinReportPropertyForSemanticsSafe.java | 54 ------ ...ge_mixinSetToValueForPropertyMetaAnnotated.java | 53 ------ ...tToValueForPropertyMetaAnnotatedOverridden.java | 54 ------ ...inSetToValueForPropertySemanticsIdempotent.java | 52 ------ ...ueForPropertySemanticsIdempotentAreYouSure.java | 53 ------ .../ActionSemanticsSafeMetaAnnotation.java | 40 ----- .../hidden/ActionLayoutHiddenPage-description.adoc | 2 +- .../hidden/PropertyHiddenPage-description.adoc | 2 +- .../PropertyLayoutHiddenPage-description.adoc | 2 +- 17 files changed, 78 insertions(+), 805 deletions(-) diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc index fb61c4ad6a..cc61a05fc6 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc @@ -63,6 +63,6 @@ However, if you navigate into these domain objects then some of these actions wi ==== Although there is no difference in the UI, a hidden action _is_ part of the metadamodel while a link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic] property is not. -A rare (but valid) use case is to invoke such a hidden action using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory] (skipping rules). +A rare (but valid) use case is to invoke such a hidden action using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory] (skipping rules). This can be for example to publish executions to any registered link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s. ==== diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc index 7b142280ef..cf7236fcc8 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc @@ -1,86 +1,61 @@ :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 `semantics` element specifies whether invoking the action will change the state of the system, and if so, how: +The link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Action.html#semantics[@Action#semantics] element specifies whether invoking the action will change the state of the system, and if so, how: * `SAFE` (sometimes also called "query-only") means no side-effects, that is, no permanent change in state of the system + * `IDEMPOTENT` means that the state of the system will change, but invoking the action again (with the same arguments) will not change the state; in other words re-runnable -* `NON_IDEMPOTENT` means that the state will change, and subsequent invocations will change the state again. +* `NON_IDEMPOTENT` means that the state will change, and subsequent invocations will change the state again. ++ If the action is not annotated, then non-idempotent is assumed. The REST API interprets these semantics by mapping to different HTTP verbs: GET, PUT and POST, respectively. Each of these three basic `semantics` element have a variant: -* `SAFE_AND_REQUEST_CACHEABLE` means that the framework will automatically cache the result of a first invocation and use the `QueryResultsCache` to return the result subsequently. +* `SAFE_AND_REQUEST_CACHEABLE` means that the framework will automatically cache the result of a first invocation and use the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/queryresultscache/QueryResultsCache.html[QueryResultsCache] to return the result subsequently. + -Note this does require that the action is invoked "through" the framework, in other words using the `WrapperFactory`. +Note this does require that the action is invoked "through" the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory]. * `IDEMPOTENT_ARE_YOU_SURE` will cause the viewer to display an "are you sure" prompt so that the end-user can choose to not invoke the action after all * `NON_IDEMPOTENT_ARE_YOU_SURE` similarly displays an "are you sure" prompt, but for non-idempotent actions. +=== How this demo works -The demo project uses this view model: - -[source,java] ----- -include::ActionSemanticsPage.java[tags=class] ----- +This page provides actions with different semantics. -== No annotations +==== No annotations If the `semantics` element is omitted completely, then the action is assumed to be non-idempotent: -* on a regular action, `incrementByAmountNoAnnotation`: -+ [source,java,indent=0] ---- include::ActionSemanticsPage.java[tags=action-no-annotation] ---- -<.> does not indicate any `semantic` element; non-idempotent is assumed - -* on a mixin action, `mixinIncrementNoAnnotation`: -+ -[source,java] ----- -include::ActionSemanticsVm_mixinIncrementNoAnnotation.java[tags=class] ----- -<.> does not indicate any `semantics` element; non-idempotent is assumed +<.> does not indicate any `semantic` element, and so non-idempotent is assumed +==== Annotated as Safe -== Annotated as Safe - -The `semantics` element can be specified explicitly using the `@Action` annotation. -One option is with safe semantics, meaning the action has no side-effects; it does not change the state of the system. +An action with safe semantics means that there are bi side-effects; it does not change the state of the system. This is also sometimes called _query-only_. -[IMPORTANT] -==== -The framework does not verify or ensure that the action results in no side-effects; the annotation is taken "on trust". -==== - Safe actions are called using HTTP GET when invoked through the Restful Objects' REST API. -Both regular and mixin actions can be annotated: - -* on regular actions; the `reportPropertyForSafe` action is annotated as having safe semantics: -+ [source,java,indent=0] ---- include::ActionSemanticsPage.java[tags=action-semantics-safe] ---- <.> safe semantics, meaning invoking the action results in no permanent change of state -* on mixin actions; `mixinReportPropertyForSafe` is annotated with safe semantics -+ -[source,java] ----- -include::ActionSemanticsVm_mixinReportPropertyForSemanticsSafe.java[tags=class] ----- -<.> safe semantics, meaning that invoking the action results in no permanent change of state +[IMPORTANT] +==== +The framework does not verify or ensure that the action results in no side-effects; the annotation is taken "on trust". +==== + -=== Safe and Request Cacheable +===== Safe and Request Cacheable Since invoking a safe query-only action will often return the same result (at least for some short period of time), the framework also provides a variant that will automatically cache the result for the duration of the interaction (HTTP request). @@ -108,7 +83,7 @@ include::ActionSemanticsPage.java[tags=action-semantics-safe-and-request-cacheab In this case the called action should indicate it was only executed once. -== Annotated as Idempotent +==== Annotated as Idempotent Annotating an action as idempotent means that it will change the state of the system, but invoking more than once will not change the state of the system further. @@ -124,152 +99,54 @@ include::ActionSemanticsPage.java[tags=action-semantics-idempotent] ---- <.> idempotent semantics -* on mixin actions; `mixinSetToValueForPropertySemanticsIdempotent` is annotated with idempotent sematics -+ -[source,java] ----- -include::ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotent.java[tags=class] ----- -<.> idempotent semantics - - -=== Are you sure? +===== Idempotent, are you sure? Because an idempotent action will change the state of the system, the framework offers a variant that will cause the viewer to render an "are you sure?" pop-up. -Both regular and mixin actions can be annotated: - -* on regular actions; the `setToValuePropertyForIdempotentAreYouSure` action is annotated as having idempotent "are you sure" semantics: -+ [source,java,indent=0] ---- include::ActionSemanticsPage.java[tags=action-semantics-idempotent-are-you-sure] ---- <.> idempotent semantics, with "are you sure" prompt -* on mixin actions; `mixinSetToValueForPropertySemanticsIdempotent` is annotated with idempotent "are you sure" semantics -+ -[source,java] ----- -include::ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java[tags=class] ----- -<.> idempotent semantics, with "are you sure" prompt - -== Annotated as Not Idempotent +==== Annotated as Not Idempotent Annotating an action as non-idempotent means that it will change the state of the system, and invoking more than once will change the state of the system further. -If an action is not annotated with the `semantics` element, it is considered to be non-idempotent. - Non-idempotent actions are called using HTTP POST when invoked through the Restful Objects' REST API. - -Both regular and mixin actions can be annotated: - -* on regular actions; the `incrementByAmountPropertyForNonIdempotent` action is annotated as having non-idempotent semantics: -+ [source,java,indent=0] ---- include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent] ---- <.> non-idempotent semantics -* on mixin actions; `mixinSetToValueForPropertySemanticsIdempotent` is annotated with non-idempotent semantics -+ -[source,java] ----- -include::ActionSemanticsVm_mixinIncrementByAmountNonIdempotent.java[tags=class] ----- -<.> non-idempotent semantics - -=== Are you sure ? +===== Not idempotent, are you sure ? -Because an non-idempotent action will change the state of the system, the framework offers a variant that will cause the viewer to render an "are you sure?" pop-up. +Because a non-idempotent action will change the state of the system, the framework offers a variant that will cause the viewer to render an "are you sure?" pop-up. -Both regular and mixin actions can be annotated: +There are two example actions, one of which takes no parameters, the other of which takes a parameter. +This demonstrates that the pop-up appears at different points: -* on regular actions; the `incrementByAmountPropertyForNonIdempotentAreYouSure` action is annotated as having non-idempotent "are you sure" semantics: +* with no parameters. + -[source,java,indent=0] ----- -include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent-are-you-sure] ----- -<.> non-idempotent semantics, with "are you sure" prompt - -* on mixin actions; `mixinIncrementNonIdempotentAreYouSure` is annotated with non-idempotent "are you sure" semantics -+ -[source,java] ----- -include::ActionSemanticsVm_mixinIncrementNonIdempotentAreYouSure.java[tags=class] ----- -<.> non-idempotent semantics, with "are you sure" prompt +The pop-up appears when the action's button is pressed. + -NOTE: Because this action takes no parameters, then the pop-up will be triggered for the action button itself (rather than the OK button of the action prompt form). - -== Meta-annotated - -The `semantics` element can also specified through a meta-annotation. -For example: - [source,java,indent=0] ---- -include::ActionSemanticsIdempotentMetaAnnotation.java[tags=class] +include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent-are-you-sure-1] ---- -<.> indicates idempotent semantics -<.> apply either to a regular action or a mixin type - -For example: - -* on regular actions; the `updateMetaAnnotated` action is meta-annotated to only be available in prototype mode: -+ -[source,java,indent=0] ----- -include::ActionSemanticsPage.java[tags=action-meta-annotated] ----- -<.> indicates idempotent semantics +<.> non-idempotent semantics, with "are you sure" prompt -* on mixin actions; `mixinSetToValueForPropertyMetaAnnotated` is meta-annotated to indicate it has idempotent semantics: +* with a parameters + -[source,java] ----- -include::ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotated.java[tags=class] ----- -<.> indicates idempotent semantics - - -== Meta-annotated Overridden - -While the `semantics` element can be specified on a meta-annotation, it can still be overridden more locally. - -Here we have the meta-annotation: - -[source,java] ----- -include::ActionSemanticsSafeMetaAnnotation.java[tags=class] ----- - -This element can be overridden: - -* for regular actions, `setToValueMetaAnnotatedOverridden`: +The pop-up appears when the OK button on the action's prompt is pressed. + [source,java,indent=0] ---- -include::ActionSemanticsPage.java[tags=action-meta-annotated-overridden] +include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent-are-you-sure-2] ---- -<.> meta-annotation indicates safe semantics -<.> overrides to indicate instead idempotent semantics - -* on mixin actions, `mixinSetToValueForPropertyMetaAnnotatedOverridden`: -+ -[source,java] ----- -include::ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotatedOverridden.java[tags=class] ----- -<.> meta-annotation indicates safe semantics -<.> overrides to indicate instead idempotent semantics - -The attribute can also be set to `NOT_SPECIFIED`. -This is useful to allow inheritance of the semantic from a meta-annotation. +<.> non-idempotent semantics, with "are you sure" prompt diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java index 16d92dccd5..398b650bb4 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java @@ -51,8 +51,7 @@ import lombok.Setter; @XmlType @XmlAccessorType(XmlAccessType.FIELD) @Named("demo.ActionSemanticsVm") -@DomainObject( - nature=Nature.VIEW_MODEL) +@DomainObject(nature=Nature.VIEW_MODEL) @NoArgsConstructor //tag::class[] public class ActionSemanticsPage implements HasAsciiDocDescription { @@ -73,8 +72,6 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { this.propertyForIdempotentAreYouSure = value; this.propertyForNonIdempotent = value; this.propertyForNonIdempotentAreYouSure = value; - this.propertyForMetaAnnotations = value; - this.propertyForMetaAnnotationsOverridden = value; } @ObjectSupport public String title() { @@ -82,38 +79,31 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { } @Property() - @PropertyLayout(fieldSetId = "not-annotated", sequence = "1") @XmlElement(required = true) @Getter @Setter private int propertyNoAnnotation; @Property() - @PropertyLayout(fieldSetId = "annotated-safe", sequence = "1") @XmlElement(required = true) @Getter @Setter private int propertyForSafe; @Property() - @PropertyLayout(fieldSetId = "annotated-safe", sequence = "2") @XmlElement(required = true) @Getter @Setter private int propertyForSafeAndRequestCacheable; - @Property() - @PropertyLayout(fieldSetId = "annotated-idempotent", sequence = "1") @XmlElement(required = true) @Getter @Setter private int propertyForIdempotent; @Property() - @PropertyLayout(fieldSetId = "annotated-idempotent", sequence = "2") @XmlElement(required = true) @Getter @Setter private int propertyForIdempotentAreYouSure; @Property() - @PropertyLayout(fieldSetId = "annotated-non-idempotent", sequence = "5") @XmlElement(required = true) @Getter @Setter private int propertyForNonIdempotent; @@ -124,28 +114,8 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { @Getter @Setter private int propertyForNonIdempotentAreYouSure; - @Property() - @PropertyLayout(fieldSetId = "meta-annotated", sequence = "1") - @XmlElement(required = true) - @Getter @Setter - private int propertyForMetaAnnotations; - - @Property() - @PropertyLayout(fieldSetId = "meta-annotated-overridden", sequence = "1") - @XmlElement(required = true) - @Getter @Setter - private int propertyForMetaAnnotationsOverridden; - //tag::action-no-annotation[] - @Action( - // no semantics attribute // <.> - ) - @ActionLayout( - named = "Increment by Amount", - describedAs = "@Action()" - , associateWith = "propertyNoAnnotation" - , sequence = "1" - ) + @Action() // <.> public ActionSemanticsPage incrementByAmountNoAnnotation(final int amount) { setPropertyNoAnnotation(getPropertyNoAnnotation() + amount); return this; @@ -159,13 +129,6 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { @Action( semantics = SemanticsOf.SAFE // <.> ) - @ActionLayout( - named = "Report", - describedAs = - "@Action(semantics = SemanticsOf.SAFE)" - , associateWith = "propertyForSafe" - , sequence = "1" - ) public ActionSemanticsPage reportPropertyForSafe() { messageService.informUser(String.format( "'PropertyForSafe' has value %d " @@ -178,12 +141,6 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { @Action( semantics = SemanticsOf.SAFE ) - @ActionLayout( - named = "Report" - , describedAs = "@Action(semantics = SemanticsOf.SAFE)" - , associateWith = "propertyForSafeAndRequestCacheable" - , sequence = "1" - ) public ActionSemanticsPage reportPropertyForSafeAndRequestCacheable() { int val = 0; for (int i=0; i<5; i++) { // <.> @@ -214,17 +171,11 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { @Action( semantics = SemanticsOf.IDEMPOTENT // <.> ) - @ActionLayout( - named = "Set to Value" - , describedAs = "@Action(semantics = SemanticsOf.IDEMPOTENT)" - , associateWith = "propertyForIdempotent" - , sequence = "1" - ) - public ActionSemanticsPage setToValuePropertyForIdempotent(final int value) { + public ActionSemanticsPage updatePropertyForIdempotent(final int value) { setPropertyForIdempotent(value); return this; } - @MemberSupport public int default0SetToValuePropertyForIdempotent() { + @MemberSupport public int default0UpdatePropertyForIdempotent() { return getPropertyForIdempotent(); } //end::action-semantics-idempotent[] @@ -233,17 +184,11 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { @Action( semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE // <.> ) - @ActionLayout( - named = "Set to Value", - describedAs = "@Action(semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE)" - , associateWith = "propertyForIdempotent" - , sequence = "1" - ) - public ActionSemanticsPage setToValuePropertyForIdempotentAreYouSure(final int value) { + public ActionSemanticsPage updatePropertyForIdempotentAreYouSure(final int value) { setPropertyForIdempotentAreYouSure(value); return this; } - @MemberSupport public int default0SetToValuePropertyForIdempotentAreYouSure() { + @MemberSupport public int default0UpdatePropertyForIdempotentAreYouSure() { return getPropertyForIdempotentAreYouSure(); } //end::action-semantics-idempotent-are-you-sure[] @@ -252,13 +197,6 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { @Action( semantics = SemanticsOf.NON_IDEMPOTENT // <.> ) - @ActionLayout( - named = "Increment by Amount" - , describedAs = - "@Action(semantics = SemanticsOf.NON_IDEMPOTENT)" - , associateWith = "propertyForNonIdempotent" - , sequence = "1" - ) public ActionSemanticsPage incrementByAmountPropertyForNonIdempotent(final int amount) { setPropertyForNonIdempotent(getPropertyForNonIdempotent() + amount); return this; @@ -268,84 +206,29 @@ public class ActionSemanticsPage implements HasAsciiDocDescription { } //end::action-semantics-non-idempotent[] -//tag::action-semantics-non-idempotent-are-you-sure[] +//tag::action-semantics-non-idempotent-are-you-sure-1[] @Action( semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE // <.> ) - @ActionLayout( - named = "Increment" - , describedAs = - "@Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)" - , associateWith = "propertyForNonIdempotentAreYouSure" - , sequence = "1" - ) public ActionSemanticsPage incrementPropertyForNonIdempotentAreYouSure() { setPropertyForNonIdempotentAreYouSure( getPropertyForNonIdempotentAreYouSure() + 1); return this; } +//end::action-semantics-non-idempotent-are-you-sure-1[] +//tag::action-semantics-non-idempotent-are-you-sure-2[] @Action( semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE // <.> ) - @ActionLayout( - named = "Increment by Amount" - , describedAs = - "@Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)" - , associateWith = "propertyForNonIdempotentAreYouSure" - , sequence = "2" - ) public ActionSemanticsPage incrementByAmountPropertyForNonIdempotentAreYouSure(final int amount) { setPropertyForNonIdempotentAreYouSure(getPropertyForNonIdempotentAreYouSure() + amount); return this; } @MemberSupport public int default0IncrementByAmountPropertyForNonIdempotentAreYouSure() { - return 1; - } -//end::action-semantics-non-idempotent-are-you-sure[] - -//tag::action-meta-annotated[] - @ActionSemanticsIdempotentMetaAnnotation // <.> - @Action( - semantics = SemanticsOf.IDEMPOTENT - ) - @ActionLayout( - named = "Set to Value" - , describedAs = - "@ActionSemanticsIdempotentMetaAnnotation" - , associateWith = "propertyForMetaAnnotations" - , sequence = "1" - ) - public ActionSemanticsPage setToValueMetaAnnotated(final int value) { - setPropertyForMetaAnnotations(value); - return this; - } - @MemberSupport public int default0SetToValueMetaAnnotated() { - return getPropertyForMetaAnnotations(); - } -//end::action-meta-annotated[] - -//tag::action-meta-annotated-overridden[] - @ActionSemanticsSafeMetaAnnotation // <.> - @Action( - semantics = SemanticsOf.IDEMPOTENT // <.> - ) - @ActionLayout( - named = "Set to Value" - , describedAs = - "@ActionSemanticsSafeMetaAnnotation " + - "@Action(semantics = SemanticsOf.IDEMPOTENT)" - , associateWith = "propertyForMetaAnnotationsOverridden" - , sequence = "1" - ) - public ActionSemanticsPage setToValueMetaAnnotatedOverridden(final int val) { - setPropertyForMetaAnnotationsOverridden(val); - return this; - } - @MemberSupport public int default0SetToValueMetaAnnotatedOverridden() { - return getPropertyForMetaAnnotationsOverridden(); + return 5; } -//end::action-meta-annotated-overridden[] +//end::action-semantics-non-idempotent-are-you-sure-2[] //tag::class[] } diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml index 998ba21705..bd2523608c 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml @@ -28,12 +28,36 @@ <bs3:col span="6"> <bs3:row> <bs3:col span="12"> - <cpt:fieldSet name="Not annotated" id="not-annotated"/> - <cpt:fieldSet name="Annotated as Safe" id="annotated-safe"/> - <cpt:fieldSet name="Annotated as Idempotent" id="annotated-idempotent"/> - <cpt:fieldSet name="Annotated as Non-Idempotent" id="annotated-non-idempotent"/> - <cpt:fieldSet name="Meta-annotated" id="meta-annotated"/> - <cpt:fieldSet name="Meta-annotated Overridden" id="meta-annotated-overridden"/> + <cpt:fieldSet name="Not annotated" id="not-annotated"> + <cpt:property id="propertyNoAnnotation"> + <cpt:action id="incrementByAmountNoAnnotation"/> + </cpt:property> + </cpt:fieldSet> + <cpt:fieldSet name="Annotated as Safe" id="annotated-safe"> + <cpt:property id="propertyForSafe"> + <cpt:action id="reportPropertyForSafe"/> + </cpt:property> + <cpt:property id="propertyForSafeAndRequestCacheable"> + <cpt:action id="reportPropertyForSafeAndRequestCacheable"/> + </cpt:property> + </cpt:fieldSet> + <cpt:fieldSet name="Annotated as Idempotent" id="annotated-idempotent"> + <cpt:property id="propertyForIdempotent"> + <cpt:action id="updatePropertyForIdempotent"/> + </cpt:property> + <cpt:property id="propertyForIdempotentAreYouSure"> + <cpt:action id="updatePropertyForIdempotentAreYouSure"/> + </cpt:property> + </cpt:fieldSet> + <cpt:fieldSet name="Annotated as Non-Idempotent" id="annotated-non-idempotent"> + <cpt:property id="propertyForNonIdempotent"> + <cpt:action id="incrementByAmountPropertyForNonIdempotent"/> + </cpt:property> + <cpt:property id="propertyForNonIdempotentAreYouSure"> + <cpt:action id="incrementPropertyForNonIdempotentAreYouSure"/> + <cpt:action id="incrementByAmountPropertyForNonIdempotentAreYouSure"/> + </cpt:property> + </cpt:fieldSet> <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/> </bs3:col> </bs3:row> diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementByAmountNonIdempotent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementByAmountNonIdempotent.java deleted file mode 100644 index 0aa48df41b..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementByAmountNonIdempotent.java +++ /dev/null @@ -1,54 +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.actions.Action.semantics; - -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.NON_IDEMPOTENT // <.> -) -@ActionLayout( - named = "Increment by Amount (Mixin)" - , describedAs = "@Action(semantics = SemanticsOf.NON_IDEMPOTENT)" - , associateWith = "propertyForNonIdempotent" - , sequence = "4" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinIncrementByAmountNonIdempotent { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act(final int incrementBy) { - page.setPropertyForNonIdempotent( - page.getPropertyForNonIdempotent() + incrementBy - ); - return page; - } - @MemberSupport public int default0Act() { - return 1; - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNoAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNoAnnotation.java deleted file mode 100644 index 22af493564..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNoAnnotation.java +++ /dev/null @@ -1,51 +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.actions.Action.semantics; - -import org.apache.causeway.applib.annotation.Action; -import org.apache.causeway.applib.annotation.ActionLayout; -import org.apache.causeway.applib.annotation.MemberSupport; - -import lombok.RequiredArgsConstructor; - -//tag::class[] -@Action( - // no semantics attribute // <.> -) -@ActionLayout( - named = "Increment (Mixin)" - , describedAs = "@Action()" - , associateWith = "propertyNoAnnotation" - , sequence = "2" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinIncrementNoAnnotation { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act(final int incrementBy) { - page.setPropertyNoAnnotation( - page.getPropertyNoAnnotation() + incrementBy); - return page; - } - @MemberSupport public int default0Act() { - return 1; - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotent.java deleted file mode 100644 index 79d20ac7f5..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotent.java +++ /dev/null @@ -1,50 +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.actions.Action.semantics; - -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.NON_IDEMPOTENT // <.> -) -@ActionLayout( - named = "Increment (Mixin)" - , describedAs = "@Action(semantics = SemanticsOf.NON_IDEMPOTENT)" - , associateWith = "propertyForNonIdempotent" - , sequence = "3" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinIncrementNonIdempotent { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act() { - page.setPropertyForNonIdempotent( - page.getPropertyForNonIdempotent() + 1 - ); - return page; - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure.java deleted file mode 100644 index 0c0f0316ed..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure.java +++ /dev/null @@ -1,50 +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.actions.Action.semantics; - -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.NON_IDEMPOTENT_ARE_YOU_SURE // <.> -) -@ActionLayout( - named = "Increment (Mixin)" - , describedAs = "@Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)" - , associateWith = "propertyForNonIdempotentAreYouSure" - , sequence = "2" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act() { - page.setPropertyForNonIdempotentAreYouSure( - page.getPropertyForNonIdempotentAreYouSure() + 1 - ); - return page; - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinReportPropertyForSemanticsSafe.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinReportPropertyForSemanticsSafe.java deleted file mode 100644 index 8ae48b9c51..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinReportPropertyForSemanticsSafe.java +++ /dev/null @@ -1,54 +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.actions.Action.semantics; - -import javax.inject.Inject; - -import org.apache.causeway.applib.annotation.Action; -import org.apache.causeway.applib.annotation.ActionLayout; -import org.apache.causeway.applib.annotation.SemanticsOf; -import org.apache.causeway.applib.services.message.MessageService; - -import lombok.RequiredArgsConstructor; - -//tag::class[] -@Action( - semantics = SemanticsOf.SAFE // <.> -) -@ActionLayout( - named = "Report (Mixin)" - , describedAs = "@Action(semantics = SemanticsOf.SAFE)" - , associateWith = "propertyForSafe" - , sequence = "2" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinReportPropertyForSemanticsSafe { - - private final ActionSemanticsPage page; - - public ActionSemanticsPage act() { - int val = page.getPropertyForSafe(); - messageService.informUser(String.format( - "'PropertyForSafe' has value %d ", val)); - return page; - } - - @Inject private MessageService messageService; -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated.java deleted file mode 100644 index b7e82b6718..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated.java +++ /dev/null @@ -1,53 +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.actions.Action.semantics; - -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[] -@ActionSemanticsIdempotentMetaAnnotation // <.> -@Action( - semantics = SemanticsOf.SAFE - -) -@ActionLayout( - named = "Set to Value (Mixin)" - , describedAs = "@ActionSemanticsIdempotentMetaAnnotation" - , associateWith = "propertyForMetaAnnotations" - , sequence = "2" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act(final int value) { - page.setPropertyForMetaAnnotations(value); - return page; - } - @MemberSupport public int default0Act() { - return page.getPropertyForMetaAnnotations(); - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden.java deleted file mode 100644 index 51afea8302..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden.java +++ /dev/null @@ -1,54 +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.actions.Action.semantics; - -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[] -@ActionSemanticsSafeMetaAnnotation // <.> -@Action( - semantics = SemanticsOf.IDEMPOTENT // <.> -) -@ActionLayout( - named = "Set to Value (Mixin)" - , describedAs = - "@ActionSemanticsSafeMetaAnnotation " + - "@Action(semantics = SemanticsOf.IDEMPOTENT)" - , associateWith = "propertyForMetaAnnotationsOverridden" - , sequence = "2" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act(final int value) { - page.setPropertyForMetaAnnotationsOverridden(value); - return page; - } - @MemberSupport public int default0Act() { - return page.getPropertyForMetaAnnotationsOverridden(); - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent.java deleted file mode 100644 index ccd7750dee..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent.java +++ /dev/null @@ -1,52 +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.actions.Action.semantics; - -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( - named = "Set to Value (Mixin)" - , describedAs = - "@Action(semantics = SemanticsOf.IDEMPOTENT)" - , associateWith = "propertyForIdempotent" - , sequence = "2" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act(final int value) { - page.setPropertyForIdempotent(value); - return page; - } - @MemberSupport public int default0Act() { - return page.getPropertyForIdempotent(); - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java deleted file mode 100644 index 081a28cd59..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java +++ /dev/null @@ -1,53 +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.actions.Action.semantics; - -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_ARE_YOU_SURE // <.> - -) -@ActionLayout( - named = "Set to Value (Mixin)" - , describedAs = - "@Action(semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE)" - , associateWith = "propertyForIdempotentAreYouSure" - , sequence = "2" -) -@RequiredArgsConstructor -public class ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure { - - private final ActionSemanticsPage page; - - @MemberSupport public ActionSemanticsPage act(final int value) { - page.setPropertyForIdempotentAreYouSure(value); - return page; - } - @MemberSupport public int default0Act() { - return page.getPropertyForIdempotentAreYouSure(); - } -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsSafeMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsSafeMetaAnnotation.java deleted file mode 100644 index 18fa6cfb57..0000000000 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsSafeMetaAnnotation.java +++ /dev/null @@ -1,40 +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.actions.Action.semantics; - -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.Action; -import org.apache.causeway.applib.annotation.SemanticsOf; - -//tag::class[] -@Action(semantics = SemanticsOf.SAFE) // <.> -@Inherited -@Target({ - ElementType.TYPE, ElementType.METHOD // <.> -}) -@Retention(RetentionPolicy.RUNTIME) -public @interface ActionSemanticsSafeMetaAnnotation { - -} -//end::class[] diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc index d273db9ec4..2f231f1199 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc @@ -63,6 +63,6 @@ However, if you navigate into these domain objects then some of these actions wi ==== Although there is no difference in the UI, a hidden action _is_ part of the metadamodel while a link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic] property is not. -A rare (but valid) use case is to invoke such a hidden action using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory] (skipping rules). +A rare (but valid) use case is to invoke such a hidden action using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory] (skipping rules). This can be for example to publish executions to any registered link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s. ==== diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc index c6f4fca906..203662c738 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc @@ -51,7 +51,7 @@ If you navigate into these domain objects then different properties will be visb ==== Although there is no difference in the UI, a hidden property _is_ part of the metadamodel while a link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic] property is not. -A rare (but valid) use case is to invoke such a hidden property using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory] (skipping rules). +A rare (but valid) use case is to invoke such a hidden property using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory] (skipping rules). This can be for example to publish executions to any registered link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s. ==== diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc index 6eccbc5f73..5ff493a5b5 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc +++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc @@ -51,7 +51,7 @@ If you navigate into these domain objects then different properties will be visb ==== Although there is no difference in the UI, a hidden property _is_ part of the metadamodel while a link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic] property is not. -A rare (but valid) use case is to invoke such a hidden property using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory] (skipping rules). +A rare (but valid) use case is to invoke such a hidden property using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory] (skipping rules). This can be for example to publish executions to any registered link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s. ====
