This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-3299
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 22d58d098fb9d488e142a88cf725c755ae7e9e99
Author: Dan Haywood <[email protected]>
AuthorDate: Tue Nov 29 18:07:16 2022 +0000

    ISIS-3299: add domainEvent facet for @Action, @Property or @Collection if 
defined as mixins (on the type)
---
 .../actions/action/ActionAnnotationFacetFactory.java    | 17 +++++++++++++++++
 .../collection/CollectionAnnotationFacetFactory.java    |  2 ++
 .../property/PropertyAnnotationFacetFactory.java        |  5 +++++
 3 files changed, 24 insertions(+)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index c8b3d8303f..c799f53299 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -23,6 +23,8 @@ import java.util.Optional;
 import javax.inject.Inject;
 
 import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.Collection;
+import org.apache.causeway.applib.annotation.SemanticsOf;
 import org.apache.causeway.applib.events.domain.ActionDomainEvent;
 import org.apache.causeway.applib.mixins.system.HasInteractionId;
 import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
@@ -41,7 +43,11 @@ import 
org.apache.causeway.core.metamodel.facets.actions.action.invocation.Actio
 import 
org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.actions.action.typeof.TypeOfFacetForActionAnnotation;
+import 
org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet;
+import 
org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract;
 import 
org.apache.causeway.core.metamodel.facets.actions.fileaccept.FileAcceptFacetForActionAnnotation;
+import 
org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
+import 
org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetDefault;
 import 
org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetForActionAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingActionFacetForActionAnnotation;
@@ -69,6 +75,8 @@ extends FacetFactoryAbstract {
                         () -> MetaModelValidatorForAmbiguousMixinAnnotations
                         
.addValidationFailure(processMethodContext.getFacetHolder(), Action.class));
 
+        inferIntentWhenOnTypeLevel(processMethodContext, actionIfAny);
+
         processExplicit(processMethodContext, actionIfAny);
         processInvocation(processMethodContext, actionIfAny);
         processHidden(processMethodContext, actionIfAny);
@@ -88,6 +96,15 @@ extends FacetFactoryAbstract {
         processFileAccept(processMethodContext, actionIfAny);
     }
 
+    void inferIntentWhenOnTypeLevel(final ProcessMethodContext 
processMethodContext, final Optional<Action> actionIfAny) {
+        if(!processMethodContext.isMixinMain() || !actionIfAny.isPresent()) {
+            return; // no @Action found neither type nor method
+        }
+
+        val facetedMethod = processMethodContext.getFacetHolder();
+        addFacet(new 
ActionDomainEventFacetDefault(actionIfAny.get().domainEvent(), facetedMethod));
+    }
+
     void processExplicit(final ProcessMethodContext processMethodContext, 
final Optional<Action> actionIfAny) {
         val holder = processMethodContext.getFacetHolder();
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
index b4225d010f..0bc32c1d28 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
@@ -40,6 +40,7 @@ import 
org.apache.causeway.core.metamodel.facets.collections.collection.modify.C
 import 
org.apache.causeway.core.metamodel.facets.collections.collection.typeof.TypeOfFacetForCollectionAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import 
org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetDefault;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import 
org.apache.causeway.core.metamodel.specloader.validator.MetaModelValidatorForAmbiguousMixinAnnotations;
 import org.apache.causeway.core.metamodel.util.EventUtil;
@@ -86,6 +87,7 @@ extends FacetFactoryAbstract {
         addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, 
facetedMethod) {});
         addFacet(new ContributingFacetAbstract(Contributing.AS_ASSOCIATION, 
facetedMethod) {});
 
+        addFacet(new 
CollectionDomainEventFacetDefault(collectionIfAny.get().domainEvent(), 
facetedMethod));
     }
 
     void processModify(final ProcessMethodContext processMethodContext, final 
Optional<Collection> collectionIfAny) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index 7d09c735c7..6baa9b844b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -29,6 +29,7 @@ import 
org.apache.causeway.applib.events.domain.PropertyDomainEvent;
 import org.apache.causeway.applib.mixins.system.HasInteractionId;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
 import 
org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet.Contributing;
@@ -115,6 +116,10 @@ extends FacetFactoryAbstract {
         val facetedMethod = processMethodContext.getFacetHolder();
         addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, 
facetedMethod) {});
         addFacet(new ContributingFacetAbstract(Contributing.AS_ASSOCIATION, 
facetedMethod) {});
+
+        val accessorFacet = 
facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class);
+        addFacet(new 
PropertyDomainEventFacetDefault(propertyIfAny.get().domainEvent(), 
accessorFacet, facetedMethod));
+
     }
 
     void processModify(final ProcessMethodContext processMethodContext, final 
Optional<Property> propertyIfAny) {

Reply via email to