You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2022/11/29 18:07:23 UTC
[isis] 01/01: ISIS-3299: add domainEvent facet for @Action, @Property or @Collection if defined as mixins (on the type)
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 <da...@haywood-associates.co.uk>
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) {