Skip to content

Commit 59dc7ae

Browse files
authored
Merge pull request #3465 from apache/TURNDP-184
CAUSEWAY-3982: adds in support for update only (annot, unit tests, change to listene…
2 parents c34fbb2 + e116909 commit 59dc7ae

15 files changed

Lines changed: 222 additions & 88 deletions

File tree

api/applib/src/main/java/org/apache/causeway/applib/annotation/Publishing.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,29 @@ public enum Publishing {
5555
*/
5656
ENABLED,
5757

58+
/**
59+
* Applies only to {@link EntityPropertyChangeSubscriber}, whereby events are published for modifications to the
60+
* object, but no events are published for the initial creation of an object.
61+
*
62+
* <p>
63+
* In the case of audit trail extension,
64+
* this effectively suppresses all of the "[NEW] -> value" entries that are created for every property of the
65+
* entity when it is being created, and also all of the "value -> [DELETED]" entries that are created for every property of the
66+
* entity when it is being deleted.
67+
* </p>
68+
*
69+
* <p>
70+
* This variant is intended only where the application code has enough traceability built into the domain
71+
* (perhaps to provide visibility to the end-users) that the technical auditing is overkill. It will also
72+
* of course reduce the volume of auditing, so improves performance (likely both response times and throughput).
73+
* </p>
74+
*
75+
* <p>
76+
* For other subscribers, behaviour is the same as {@link #ENABLED}.
77+
* </p>
78+
*/
79+
ENABLED_FOR_UPDATES_ONLY,
80+
5881
/**
5982
* Do <b>not</b> publish data triggered by interaction with this object
6083
* (even if otherwise configured to enable publishing).

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ public static Optional<CommandPublishingFacet> create(
9393
case DISABLED:
9494
return new CommandPublishingFacetForActionAnnotation.Disabled(processor, holder, servicesInjector);
9595
case ENABLED:
96+
case ENABLED_FOR_UPDATES_ONLY:
9697
return new CommandPublishingFacetForActionAnnotation.Enabled(processor, holder, servicesInjector);
9798
default:
9899
throw new IllegalStateException(String.format("@Action#commandPublishing '%s' not recognised", publishing));

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public static CommandPublishingFacet create(
9292
case DISABLED:
9393
return new CommandPublishingFacetForPropertyAnnotation.Disabled(processor, holder, servicesInjector);
9494
case ENABLED:
95+
case ENABLED_FOR_UPDATES_ONLY:
9596
return new CommandPublishingFacetForPropertyAnnotation.Enabled(processor, holder, servicesInjector);
9697
default:
9798
throw new IllegalStateException(String.format("@Property#commandPublishing '%s' not recognised", publishing));

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public static Optional<ExecutionPublishingFacet> create(
8383
case DISABLED:
8484
return new ExecutionPublishingFacetForActionAnnotation.Disabled(holder);
8585
case ENABLED:
86+
case ENABLED_FOR_UPDATES_ONLY:
8687
return new ExecutionPublishingFacetForActionAnnotation.Enabled(holder);
8788
default:
8889
throw new IllegalStateException(String.format("@Action#executionPublishing '%s' not recognised", publishing));

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public static ExecutionPublishingFacet create(
8383
case DISABLED:
8484
return new ExecutionPublishingFacetForPropertyAnnotation.Disabled(holder);
8585
case ENABLED:
86+
case ENABLED_FOR_UPDATES_ONLY:
8687
return new ExecutionPublishingFacetForPropertyAnnotation.Enabled(holder);
8788
default:
8889
throw new IllegalStateException(String.format("@Property#executionPublishing '%s' not recognised", publishing));

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/entitychangepublishing/EntityChangePublishingFacetForDomainObjectAnnotation.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,19 @@ public static Optional<EntityChangePublishingFacet> create(
5757
: new EntityChangePublishingFacetFromConfiguration(holder, true));
5858
}
5959
case DISABLED:
60-
return Optional.of(new EntityChangePublishingFacetForDomainObjectAnnotation(holder, false));
60+
return Optional.of(new EntityChangePublishingFacetForDomainObjectAnnotation(holder, false, false, false, false));
6161
case ENABLED:
62-
return Optional.of(new EntityChangePublishingFacetForDomainObjectAnnotation(holder, true));
62+
return Optional.of(new EntityChangePublishingFacetForDomainObjectAnnotation(holder, true, true, true, true));
63+
case ENABLED_FOR_UPDATES_ONLY:
64+
return Optional.of(new EntityChangePublishingFacetForDomainObjectAnnotation(holder, true, false, true, false));
6365

6466
default:
6567
throw _Exceptions.unmatchedCase(publish);
6668
}
6769
}
6870

69-
protected EntityChangePublishingFacetForDomainObjectAnnotation(final FacetHolder holder, boolean enabled) {
70-
super(holder, enabled);
71+
protected EntityChangePublishingFacetForDomainObjectAnnotation(final FacetHolder holder, boolean enabled, boolean enabledForCreate, boolean enabledForUpdate, boolean enabledForDelete) {
72+
super(holder, enabled, enabledForCreate, enabledForUpdate, enabledForDelete);
7173
}
7274
}
7375

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/entitychangepublishing/EntityChangePublishingFacetForDomainObjectAnnotationAsConfigured.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
public class EntityChangePublishingFacetForDomainObjectAnnotationAsConfigured extends EntityChangePublishingFacetForDomainObjectAnnotation {
2626

2727
public EntityChangePublishingFacetForDomainObjectAnnotationAsConfigured(final FacetHolder facetHolder, final boolean enabled) {
28-
super(facetHolder, enabled);
28+
super(facetHolder, enabled, enabled, enabled, enabled);
2929
}
3030

3131
}

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/entitychangepublishing/EntityChangePublishingFacetFromConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class EntityChangePublishingFacetFromConfiguration
3232
extends EntityChangePublishingFacetAbstract {
3333

3434
public EntityChangePublishingFacetFromConfiguration(final FacetHolder facetHolder, final boolean enabled) {
35-
super(facetHolder, enabled);
35+
super(facetHolder, enabled, enabled, enabled, enabled);
3636
}
3737

3838
}

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/publish/entitychange/EntityChangePublishingFacet.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*/
3535
public interface EntityChangePublishingFacet extends Facet {
3636

37-
public static boolean isPublishingEnabled(final FacetHolder facetHolder) {
37+
static boolean isPublishingEnabled(final FacetHolder facetHolder) {
3838
if(facetHolder==null) {
3939
return false;
4040
}
@@ -50,6 +50,57 @@ public static boolean isPublishingEnabled(final FacetHolder facetHolder) {
5050
&& entityChangePublishingFacet.isEnabled();
5151
}
5252

53+
static boolean isPublishingEnabledForCreate(final FacetHolder facetHolder) {
54+
if(facetHolder==null) {
55+
return false;
56+
}
57+
58+
if(facetHolder instanceof ObjectSpecification) {
59+
if(!((ObjectSpecification)facetHolder).isEntity()) {
60+
return false;
61+
}
62+
}
63+
64+
val entityChangePublishingFacet = facetHolder.getFacet(EntityChangePublishingFacet.class);
65+
return entityChangePublishingFacet != null
66+
&& entityChangePublishingFacet.isEnabledForCreate();
67+
}
68+
69+
static boolean isPublishingEnabledForUpdate(final FacetHolder facetHolder) {
70+
if(facetHolder==null) {
71+
return false;
72+
}
73+
74+
if(facetHolder instanceof ObjectSpecification) {
75+
if(!((ObjectSpecification)facetHolder).isEntity()) {
76+
return false;
77+
}
78+
}
79+
80+
val entityChangePublishingFacet = facetHolder.getFacet(EntityChangePublishingFacet.class);
81+
return entityChangePublishingFacet != null
82+
&& entityChangePublishingFacet.isEnabledForUpdate();
83+
}
84+
85+
static boolean isPublishingEnabledForDelete(final FacetHolder facetHolder) {
86+
if(facetHolder==null) {
87+
return false;
88+
}
89+
90+
if(facetHolder instanceof ObjectSpecification) {
91+
if(!((ObjectSpecification)facetHolder).isEntity()) {
92+
return false;
93+
}
94+
}
95+
96+
val entityChangePublishingFacet = facetHolder.getFacet(EntityChangePublishingFacet.class);
97+
return entityChangePublishingFacet != null
98+
&& entityChangePublishingFacet.isEnabledForDelete();
99+
}
100+
53101
boolean isEnabled();
102+
boolean isEnabledForCreate();
103+
boolean isEnabledForUpdate();
104+
boolean isEnabledForDelete();
54105

55106
}

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/publish/entitychange/EntityChangePublishingFacetAbstract.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,21 @@ private static final Class<? extends Facet> type() {
3535
@Getter
3636
private final boolean enabled;
3737

38-
public EntityChangePublishingFacetAbstract(final FacetHolder facetHolder, boolean enabled) {
38+
@Getter
39+
private final boolean enabledForCreate;
40+
41+
@Getter
42+
private final boolean enabledForUpdate;
43+
44+
@Getter
45+
private final boolean enabledForDelete;
46+
47+
public EntityChangePublishingFacetAbstract(final FacetHolder facetHolder, boolean enabled, boolean enabledForCreate, boolean enabledForUpdate, boolean enabledForDelete) {
3948
super(EntityChangePublishingFacetAbstract.type(), facetHolder);
4049
this.enabled = enabled;
50+
this.enabledForCreate = enabledForCreate;
51+
this.enabledForUpdate = enabledForUpdate;
52+
this.enabledForDelete = enabledForDelete;
4153
}
4254

4355
}

0 commit comments

Comments
 (0)