This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3546
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/CAUSEWAY-3546 by this push:
new f0b4c97117 CAUSEWAY-3546: fixes impl and tests
f0b4c97117 is described below
commit f0b4c97117d3435b537f303f9fa9c9d0683a1c51
Author: danhaywood <[email protected]>
AuthorDate: Fri Sep 29 09:52:01 2023 +0100
CAUSEWAY-3546: fixes impl and tests
---
.../CommandPublishingFacetForActionAnnotation.java | 4 +-
...ommandPublishingFacetForPropertyAnnotation.java | 10 ++-
...xecutionPublishingFacetForActionAnnotation.java | 48 ++++++------
...cutionPublishingFacetForPropertyAnnotation.java | 7 +-
...tationFacetFactoryTest_executionPublishing.java | 86 +++++++++++++++++++++-
5 files changed, 117 insertions(+), 38 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
index e4f6f711e6..8f4dd4a4d1 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
@@ -88,14 +88,14 @@ public abstract class
CommandPublishingFacetForActionAnnotation extends CommandP
case ALL:
return new
CommandPublishingFacetForActionAnnotationAsConfigured.All(holder,
servicesInjector);
default:
- throw new
IllegalStateException(String.format("configured commandPublishing policy '%s'
not recognised", publishingPolicy));
+ throw new
IllegalStateException(String.format("configured action.commandPublishing policy
'%s' not recognised", publishingPolicy));
}
case DISABLED:
return new
CommandPublishingFacetForActionAnnotation.Disabled(processor, holder,
servicesInjector);
case ENABLED:
return new
CommandPublishingFacetForActionAnnotation.Enabled(processor, holder,
servicesInjector);
default:
- throw new
IllegalStateException(String.format("commandPublishing '%s' not recognised",
publishing));
+ throw new
IllegalStateException(String.format("@Action#commandPublishing '%s' not
recognised", publishing));
}
});
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
index 7415b05ce3..6a5a8196c3 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
@@ -87,28 +87,30 @@ public abstract class
CommandPublishingFacetForPropertyAnnotation extends Comman
case ALL:
return new
CommandPublishingFacetForPropertyAnnotationAsConfigured.All(holder,
servicesInjector);
default:
- throw new
IllegalStateException(String.format("configured publishingPolicy '%s' not
recognised", publishingPolicy));
+ throw new
IllegalStateException(String.format("configured property.commandpublishing
policy '%s' not recognised", publishingPolicy));
}
case DISABLED:
return new
CommandPublishingFacetForPropertyAnnotation.Disabled(processor, holder,
servicesInjector);
case ENABLED:
return new
CommandPublishingFacetForPropertyAnnotation.Enabled(processor, holder,
servicesInjector);
default:
- throw new
IllegalStateException(String.format("commandPublishing '%s' not recognised",
publishing));
+ throw new
IllegalStateException(String.format("@Property#commandPublishing '%s' not
recognised", publishing));
}
})
.orElseGet(() -> {
// there is no publishing facet from either @Action or
@Property, so use the appropriate configuration to install a default
if (representsProperty(holder)) {
+ // we are dealing with a property
switch (publishingPolicy) {
case NONE:
return new
CommandPublishingFacetForPropertyFromConfiguration.None(holder,
servicesInjector);
case ALL:
return new
CommandPublishingFacetForPropertyFromConfiguration.All(holder,
servicesInjector);
default:
- throw new
IllegalStateException(String.format("configured property publishingPolicy '%s'
not recognised", publishingPolicy));
+ throw new
IllegalStateException(String.format("configured property.commandPublishing
policy '%s' not recognised", publishingPolicy));
}
} else {
+ // we are dealing with an action
val actionPublishingPolicy =
ActionConfigOptions.actionCommandPublishingPolicy(configuration);
switch (actionPublishingPolicy) {
case NONE:
@@ -121,7 +123,7 @@ public abstract class
CommandPublishingFacetForPropertyAnnotation extends Comman
case ALL:
return new
CommandPublishingFacetForActionFromConfiguration.All(holder, servicesInjector);
default:
- throw new
IllegalStateException(String.format("configured action publishingPolicy '%s'
not recognised", actionPublishingPolicy));
+ throw new
IllegalStateException(String.format("configured action.commandPublishing policy
'%s' not recognised", actionPublishingPolicy));
}
}
});
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java
index da9b9ba8f0..a4fa9d5553 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java
@@ -63,31 +63,31 @@ public abstract class
ExecutionPublishingFacetForActionAnnotation extends Execut
return
actionsIfAny
.filter(action -> action.executionPublishing() !=
Publishing.NOT_SPECIFIED)
- .map(Action::executionPublishing)
- .<ExecutionPublishingFacet>map(publishing -> {
- switch (publishing) {
- case AS_CONFIGURED:
- switch (publishingPolicy) {
- case NONE:
- return new
ExecutionPublishingFacetForActionAnnotationAsConfigured.None(holder);
- case IGNORE_QUERY_ONLY:
- case IGNORE_SAFE:
- return hasSafeSemantics(holder)
- ? new
ExecutionPublishingFacetForActionAnnotationAsConfigured.IgnoreSafe(holder)
- : new
ExecutionPublishingFacetForActionAnnotationAsConfigured.IgnoreSafeYetNot(holder);
- case ALL:
- return new
ExecutionPublishingFacetForActionAnnotationAsConfigured.All(holder);
+ .map(Action::executionPublishing)
+ .<ExecutionPublishingFacet>map(publishing -> {
+ switch (publishing) {
+ case AS_CONFIGURED:
+ switch (publishingPolicy) {
+ case NONE:
+ return new
ExecutionPublishingFacetForActionAnnotationAsConfigured.None(holder);
+ case IGNORE_QUERY_ONLY:
+ case IGNORE_SAFE:
+ return hasSafeSemantics(holder)
+ ? new
ExecutionPublishingFacetForActionAnnotationAsConfigured.IgnoreSafe(holder)
+ : new
ExecutionPublishingFacetForActionAnnotationAsConfigured.IgnoreSafeYetNot(holder);
+ case ALL:
+ return new
ExecutionPublishingFacetForActionAnnotationAsConfigured.All(holder);
+ default:
+ throw new
IllegalStateException(String.format("configured action.executionPublishing
policy '%s' not recognised", publishingPolicy));
+ }
+ case DISABLED:
+ return new
ExecutionPublishingFacetForActionAnnotation.Disabled(holder);
+ case ENABLED:
+ return new
ExecutionPublishingFacetForActionAnnotation.Enabled(holder);
default:
- throw new
IllegalStateException(String.format("configured executionPublishing policy '%s'
not recognised", publishingPolicy));
- }
- case DISABLED:
- return new
ExecutionPublishingFacetForActionAnnotation.Disabled(holder);
- case ENABLED:
- return new
ExecutionPublishingFacetForActionAnnotation.Enabled(holder);
- default:
- throw new
IllegalStateException(String.format("executionPublishing '%s' not recognised",
publishing));
- }
- });
+ throw new
IllegalStateException(String.format("@Action#executionPublishing '%s' not
recognised", publishing));
+ }
+ });
}
static boolean hasSafeSemantics(final FacetHolder holder) {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
index ad6bc81f20..a1ac856636 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
@@ -29,8 +29,6 @@ import
org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facets.TypedHolder;
import
org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet;
-import
org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation;
-import
org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionFromConfiguration;
import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet;
import lombok.val;
@@ -87,7 +85,7 @@ extends ExecutionPublishingFacetAbstract {
case ENABLED:
return new
ExecutionPublishingFacetForPropertyAnnotation.Enabled(holder);
default:
- throw new
IllegalStateException(String.format("executionPublishing '%s' not recognised",
publishing));
+ throw new
IllegalStateException(String.format("@Property#executionPublishing '%s' not
recognised", publishing));
}
})
.orElseGet(() -> {
@@ -119,8 +117,7 @@ extends ExecutionPublishingFacetAbstract {
throw new
IllegalStateException(String.format("configured action.executionPublishing
policy '%s' not recognised", actionPublishingPolicy));
}
}
- }
- );
+ });
}
private static boolean representsProperty(FacetHolder holder) {
diff --git
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
index 21d8efdb33..f5e98c5ece 100644
---
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
+++
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
@@ -172,7 +172,7 @@ extends ActionAnnotationFacetFactoryTest {
}
@Test
- void
given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNoSemantics_thenException()
{
+ void
given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNoSemantics_thenPublishing()
{
class Customer {
@Action(executionPublishing =
org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED)
@@ -182,8 +182,88 @@ extends ActionAnnotationFacetFactoryTest {
allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
actionScenario(Customer.class, "someAction", (processMethodContext,
facetHolder, facetedMethod)->{
// when
- assertThrows(IllegalStateException.class, ()->
- processExecutionPublishing(facetFactory,
processMethodContext));
+ processExecutionPublishing(facetFactory, processMethodContext);
+
+ // then
+ final Facet facet =
facetedMethod.getFacet(ExecutionPublishingFacet.class);
+ assertNotNull(facet);
+
assertTrue(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod));
+ assertNoMethodsRemoved();
+ });
+ }
+
+ @Test
+ void
given_asConfigured_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_thenNoPublishing()
{
+
+ class Customer {
+ @Action(executionPublishing =
org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED)
+ public void someAction() { }
+ }
+
+
allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
+ actionScenario(Customer.class, "someAction", (processMethodContext,
facetHolder, facetedMethod)->{
+
+ // given
+ facetedMethod.addFacet(new
ActionSemanticsFacetAbstract(SemanticsOf.SAFE, facetedMethod) {});
+
+ // when
+ processExecutionPublishing(facetFactory, processMethodContext);
+
+ // then
+ final Facet facet =
facetedMethod.getFacet(ExecutionPublishingFacet.class);
+ assertNotNull(facet);
+
assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod));
+ assertNoMethodsRemoved();
+ });
+ }
+
+ @Test
+ void
given_asConfigured_and_configurationSetToIgnoreQueryOnly_andIdempotentSemantics_thenNoPublishing()
{
+
+ class Customer {
+ @Action(executionPublishing =
org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED)
+ public void someAction() { }
+ }
+
+
allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
+ actionScenario(Customer.class, "someAction", (processMethodContext,
facetHolder, facetedMethod)->{
+
+ // given
+ facetedMethod.addFacet(new
ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {});
+
+ // when
+ processExecutionPublishing(facetFactory, processMethodContext);
+
+ // then
+ final Facet facet =
facetedMethod.getFacet(ExecutionPublishingFacet.class);
+ assertNotNull(facet);
+
assertTrue(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod));
+ assertNoMethodsRemoved();
+ });
+ }
+
+ @Test
+ void
given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNonIdempotentSemantics_thenNoPublishing()
{
+
+ class Customer {
+ @Action(executionPublishing =
org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED)
+ public void someAction() { }
+ }
+
+
allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
+ actionScenario(Customer.class, "someAction", (processMethodContext,
facetHolder, facetedMethod)->{
+
+ // given
+ facetedMethod.addFacet(new
ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {});
+
+ // when
+ processExecutionPublishing(facetFactory, processMethodContext);
+
+ // then
+ final Facet facet =
facetedMethod.getFacet(ExecutionPublishingFacet.class);
+ assertNotNull(facet);
+
assertTrue(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod));
+ assertNoMethodsRemoved();
});
}