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) {
