>
implements HidingInteractionAdvisor {
+ // -- FACTORIES
+
+ /**
+ * For regular (non mixed-in) members only.
+ *
+ * @return empty, if event is not post-able
+ */
+ public static Optional createRegular(
+ final Optional collectionIfAny,
+ final ObjectSpecification typeSpec,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final FacetHolder facetHolder) {
+
+ val collectionDomainEventFacet = collectionIfAny
+ .map(Collection::domainEvent)
+ .filter(domainEvent -> domainEvent != CollectionDomainEvent.Default.class)
+ .map(domainEvent ->
+ new CollectionDomainEventFacet(
+ defaultFromDomainObjectIfRequired(typeSpec, domainEvent),
+ EventTypeOrigin.ANNOTATED_MEMBER, facetHolder))
+ .orElse(
+ new CollectionDomainEventFacet(
+ defaultFromDomainObjectIfRequired(typeSpec, CollectionDomainEvent.Default.class),
+ EventTypeOrigin.DEFAULT, facetHolder));
+
+ return EventUtil.eventTypeIsPostable(
+ collectionDomainEventFacet.getEventType(),
+ CollectionDomainEvent.Noop.class,
+ CollectionDomainEvent.Default.class,
+ facetHolder.getConfiguration().getApplib().getAnnotation().getCollection().getDomainEvent().isPostForDefault())
+ ? Optional.of(collectionDomainEventFacet)
+ : Optional.empty();
+ }
+
+ /**
+ * For mixed-in members.
+ */
+ public static Optional createMixedIn(
+ final @NonNull ObjectSpecification mixeeSpecification,
+ final @NonNull OneToManyAssociationMixedIn mixedInCollection) {
+
+ val facetedMethod = mixedInCollection.getFacetedMethod();
+ final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade
+
+ //TODO[CAUSEWAY-3409] what if the @Collection annotation is not on the method but on the (mixin) type
+ final Collection collectionAnnot =
+ _Annotations.synthesize(method, Collection.class)
+ .orElse(null);
+
+ if(collectionAnnot != null) {
+ final Class extends CollectionDomainEvent, ?>> collectionDomainEventType =
+ defaultFromDomainObjectIfRequired(
+ mixeeSpecification, collectionAnnot.domainEvent());
+ return Optional.of(
+ new CollectionDomainEventFacet(
+ collectionDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, mixedInCollection));
+ }
+ return Optional.empty();
+ }
+
+ // --
+
private static Class extends Facet> type() {
return CollectionDomainEventFacet.class;
}
+ private static Class extends CollectionDomainEvent,?>> defaultFromDomainObjectIfRequired(
+ final ObjectSpecification typeSpec,
+ final Class extends CollectionDomainEvent,?>> collectionDomainEventType) {
+ if (collectionDomainEventType == CollectionDomainEvent.Default.class) {
+ final CollectionDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject =
+ typeSpec.getFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class);
+ if (typeFromDomainObject != null) {
+ return typeFromDomainObject.getEventType();
+ }
+ }
+ return collectionDomainEventType;
+ }
+
private final DomainEventHelper domainEventHelper;
- public CollectionDomainEventFacet(
+ protected CollectionDomainEventFacet(
final Class extends CollectionDomainEvent, ?>> eventType,
final EventTypeOrigin eventTypeOrigin,
final FacetHolder holder) {
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 8657c9fc7da..aa62a8d0f02 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
@@ -25,18 +25,15 @@
import org.apache.causeway.applib.annotation.Property;
import org.apache.causeway.applib.annotation.SemanticsOf;
-import org.apache.causeway.applib.events.domain.PropertyDomainEvent;
import org.apache.causeway.applib.mixins.system.HasInteractionId;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin;
import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet.Contributing;
import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract;
import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
import org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingPropertyFacetForPropertyAnnotation;
-import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.PropertyDomainEventDefaultFacetForDomainObjectAnnotation;
import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.causeway.core.metamodel.facets.properties.projection.ProjectingFacetFromPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.property.disabled.DisabledFacetForPropertyAnnotation;
@@ -57,10 +54,8 @@
import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.specloader.validator.MetaModelValidatorForAmbiguousMixinAnnotations;
import org.apache.causeway.core.metamodel.specloader.validator.MetaModelValidatorForConflictingOptionality;
-import org.apache.causeway.core.metamodel.util.EventUtil;
import lombok.val;
@@ -135,77 +130,53 @@ void processModify(final ProcessMethodContext processMethodContext, final Option
//
// search for @Property(domainEvent=...), else use default event type
- val propertyDomainEventFacet = propertyIfAny
- .map(Property::domainEvent)
- .filter(domainEvent -> domainEvent != PropertyDomainEvent.Default.class)
- .map(domainEvent -> new PropertyDomainEventFacet(
- defaultFromDomainObjectIfRequired(typeSpec, domainEvent),
- EventTypeOrigin.ANNOTATED_MEMBER, getterFacet, holder))
- .orElse(new PropertyDomainEventFacet(
- defaultFromDomainObjectIfRequired(typeSpec, PropertyDomainEvent.Default.class),
- EventTypeOrigin.DEFAULT, getterFacet, holder));
-
- if(EventUtil.eventTypeIsPostable(
- propertyDomainEventFacet.getEventType(),
- PropertyDomainEvent.Noop.class,
- PropertyDomainEvent.Default.class,
- getConfiguration().getApplib().getAnnotation().getProperty().getDomainEvent().isPostForDefault()
- )) {
- addFacet(propertyDomainEventFacet);
- }
-
+ PropertyDomainEventFacet
+ .createRegular(propertyIfAny, typeSpec, getterFacet, holder)
+ .ifPresent(propertyDomainEventFacet->{
- //
- // if the property is mutable, then replace the current setter and clear facets with equivalents that
- // emit the appropriate domain event and then delegate onto the underlying
- //
+ addFacet(propertyDomainEventFacet);
- final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class);
- if(setterFacet != null) {
- // the current setter facet will end up as the underlying facet
- final PropertySetterFacet replacementFacet;
-
- if(propertyDomainEventFacet.getEventTypeOrigin().isAnnotatedMember()) {
- replacementFacet = new PropertySetterFacetForDomainEventFromPropertyAnnotation(
- propertyDomainEventFacet.getEventType(), getterFacet, setterFacet, propertyDomainEventFacet, holder);
- } else
- // default
- {
- replacementFacet = new PropertySetterFacetForDomainEventFromDefault(
- propertyDomainEventFacet.getEventType(), getterFacet, setterFacet, propertyDomainEventFacet, holder);
+ var eventType = propertyDomainEventFacet.getEventType();
+ var eventTypeOrigin = propertyDomainEventFacet.getEventTypeOrigin();
+
+ //
+ // if the property is mutable, then replace the current setter and clear facets with equivalents that
+ // emit the appropriate domain event and then delegate onto the underlying
+ //
+
+ final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class);
+ if(setterFacet != null) {
+ // the current setter facet will end up as the underlying facet
+ final PropertySetterFacet replacementFacet;
+
+ if(eventTypeOrigin.isAnnotatedMember()) {
+ replacementFacet = new PropertySetterFacetForDomainEventFromPropertyAnnotation(
+ eventType, getterFacet, setterFacet, holder);
+ } else {
+ // default
+ replacementFacet = new PropertySetterFacetForDomainEventFromDefault(
+ eventType, getterFacet, setterFacet, holder);
+ }
+ addFacet(replacementFacet);
}
- addFacet(replacementFacet);
- }
- final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class);
- if(clearFacet != null) {
- // the current clear facet will end up as the underlying facet
- final PropertyClearFacet replacementFacet;
-
- if(propertyDomainEventFacet.getEventTypeOrigin().isAnnotatedMember()) {
- replacementFacet = new PropertyClearFacetForDomainEventFromPropertyAnnotation(
- propertyDomainEventFacet.getEventType(), getterFacet, clearFacet, propertyDomainEventFacet, holder);
- } else
- // default
- {
- replacementFacet = new PropertyClearFacetForDomainEventFromDefault(
- propertyDomainEventFacet.getEventType(), getterFacet, clearFacet, propertyDomainEventFacet, holder);
+ final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class);
+ if(clearFacet != null) {
+ // the current clear facet will end up as the underlying facet
+ final PropertyClearFacet replacementFacet;
+
+ if(eventTypeOrigin.isAnnotatedMember()) {
+ replacementFacet = new PropertyClearFacetForDomainEventFromPropertyAnnotation(
+ eventType, getterFacet, clearFacet, holder);
+ } else {
+ // default
+ replacementFacet = new PropertyClearFacetForDomainEventFromDefault(
+ eventType, getterFacet, clearFacet, holder);
+ }
+ addFacet(replacementFacet);
}
- addFacet(replacementFacet);
- }
- }
- public static Class extends PropertyDomainEvent,?>> defaultFromDomainObjectIfRequired(
- final ObjectSpecification typeSpec,
- final Class extends PropertyDomainEvent,?>> propertyDomainEventType) {
- if (propertyDomainEventType == PropertyDomainEvent.Default.class) {
- final PropertyDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject =
- typeSpec.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class);
- if (typeFromDomainObject != null) {
- return typeFromDomainObject.getEventType();
- }
- }
- return propertyDomainEventType;
+ });
}
void processHidden(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
index 645160f5c47..d513a87b969 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
@@ -27,14 +27,12 @@ public class PropertyClearFacetForDomainEventFromDefault
extends PropertySetterOrClearFacetForDomainEventAbstract
implements PropertyClearFacet {
-
public PropertyClearFacetForDomainEventFromDefault(
final Class extends PropertyDomainEvent, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
final PropertyClearFacet clearFacet,
- final PropertyDomainEventFacet propertyInteractionFacet,
final FacetHolder holder) {
- super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, holder);
+ super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
index 0e0c5df79b2..abb9d80b666 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
@@ -27,14 +27,12 @@ public class PropertyClearFacetForDomainEventFromPropertyAnnotation
extends PropertySetterOrClearFacetForDomainEventAbstract
implements PropertyClearFacet {
-
public PropertyClearFacetForDomainEventFromPropertyAnnotation(
final Class extends PropertyDomainEvent, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
final PropertyClearFacet clearFacet,
- final PropertyDomainEventFacet propertyInteractionFacet,
final FacetHolder holder) {
- super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, holder);
+ super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java
index 525f96545af..5c472b10eb8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java
@@ -18,15 +18,18 @@
*/
package org.apache.causeway.core.metamodel.facets.properties.property.modify;
+import java.lang.reflect.Method;
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.apache.causeway.applib.annotation.Property;
import org.apache.causeway.applib.events.domain.AbstractDomainEvent;
import org.apache.causeway.applib.events.domain.PropertyDomainEvent;
import org.apache.causeway.applib.services.i18n.TranslatableString;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.applib.services.i18n.TranslationService;
import org.apache.causeway.commons.internal.base._Casts;
+import org.apache.causeway.commons.internal.reflection._Annotations;
import org.apache.causeway.core.metamodel.consent.Consent.VetoReason;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
@@ -44,6 +47,10 @@
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn;
+import org.apache.causeway.core.metamodel.util.EventUtil;
+
+import lombok.NonNull;
+import lombok.val;
public class PropertyDomainEventFacet
extends DomainEventFacetAbstract>
@@ -52,10 +59,87 @@ public class PropertyDomainEventFacet
DisablingInteractionAdvisor,
ValidatingInteractionAdvisor {
+ // -- FACTORIES
+
+ /**
+ * For regular (non mixed-in) members only.
+ *
+ * @return empty, if event is not post-able
+ */
+ public static Optional createRegular(
+ final Optional propertyIfAny,
+ final ObjectSpecification typeSpec,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final FacetHolder facetHolder) {
+
+ val propertyDomainEventFacet = propertyIfAny
+ .map(Property::domainEvent)
+ .filter(domainEvent -> domainEvent != PropertyDomainEvent.Default.class)
+ .map(domainEvent -> new PropertyDomainEventFacet(
+ defaultFromDomainObjectIfRequired(typeSpec, domainEvent),
+ EventTypeOrigin.ANNOTATED_MEMBER, getterFacet, facetHolder))
+ .orElse(new PropertyDomainEventFacet(
+ defaultFromDomainObjectIfRequired(typeSpec, PropertyDomainEvent.Default.class),
+ EventTypeOrigin.DEFAULT, getterFacet, facetHolder));
+
+ return EventUtil.eventTypeIsPostable(
+ propertyDomainEventFacet.getEventType(),
+ PropertyDomainEvent.Noop.class,
+ PropertyDomainEvent.Default.class,
+ facetHolder.getConfiguration().getApplib().getAnnotation().getProperty().getDomainEvent().isPostForDefault())
+ ? Optional.of(propertyDomainEventFacet)
+ : Optional.empty();
+ }
+
+ /**
+ * For mixed-in members.
+ */
+ public static Optional createMixedIn(
+ final @NonNull ObjectSpecification mixeeSpecification,
+ final @NonNull OneToOneAssociationMixedIn mixedInProperty) {
+
+ val facetedMethod = mixedInProperty.getFacetedMethod();
+ final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade
+
+ //TODO[CAUSEWAY-3409] what if the @Property annotation is not on the method but on the (mixin) type
+ final Property propertyAnnot =
+ _Annotations.synthesize(method, Property.class)
+ .orElse(null);
+
+ if(propertyAnnot != null) {
+ final Class extends PropertyDomainEvent, ?>> propertyDomainEventType =
+ defaultFromDomainObjectIfRequired(
+ mixeeSpecification, propertyAnnot.domainEvent());
+ val getterFacet = (PropertyOrCollectionAccessorFacet)null;
+
+ return Optional.of(
+ new PropertyDomainEventFacet(
+ propertyDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, getterFacet, mixedInProperty));
+ }
+
+ return Optional.empty();
+
+ }
+
+ // --
+
private static Class extends Facet> type() {
return PropertyDomainEventFacet.class;
}
+ private static Class extends PropertyDomainEvent,?>> defaultFromDomainObjectIfRequired(
+ final ObjectSpecification typeSpec,
+ final Class extends PropertyDomainEvent,?>> propertyDomainEventType) {
+ if (propertyDomainEventType == PropertyDomainEvent.Default.class) {
+ final PropertyDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject =
+ typeSpec.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class);
+ if (typeFromDomainObject != null) {
+ return typeFromDomainObject.getEventType();
+ }
+ }
+ return propertyDomainEventType;
+ }
+
private final DomainEventHelper domainEventHelper;
private final PropertyOrCollectionAccessorFacet getterFacetIfAny;
@@ -65,11 +149,11 @@ private static Class extends Facet> type() {
/**
* @param getterFacetIfAny - will be null if this is for a mixin {@link OneToOneAssociationMixedIn}.
*/
- public PropertyDomainEventFacet(
+ protected PropertyDomainEventFacet(
final Class extends PropertyDomainEvent, ?>> eventType,
final EventTypeOrigin eventTypeOrigin,
final PropertyOrCollectionAccessorFacet getterFacetIfAny,
- final FacetHolder holder ) {
+ final FacetHolder holder) {
super(type(), eventType, eventTypeOrigin, holder);
this.getterFacetIfAny = getterFacetIfAny;
@@ -168,4 +252,6 @@ public void visitAttributes(final BiConsumer visitor) {
visitor.accept("getterFacet", getterFacetIfAny);
}
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
index 2918377da77..754a31c2cf9 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
@@ -32,10 +32,9 @@ public PropertySetterFacetForDomainEventFromDefault(
final Class extends PropertyDomainEvent, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
final PropertySetterFacet setterFacet,
- final PropertyDomainEventFacet propertyInteractionFacet,
final FacetHolder holder) {
- super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, holder);
+ super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
index 9e9218ed459..77351e625e5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
@@ -32,9 +32,8 @@ public PropertySetterFacetForDomainEventFromPropertyAnnotation(
final Class extends PropertyDomainEvent, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
final PropertySetterFacet setterFacet,
- final PropertyDomainEventFacet propertyInteractionFacet,
final FacetHolder holder) {
- super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, holder);
+ super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 4e634e08cdd..cf961e6a78a 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -65,7 +65,6 @@ protected PropertySetterOrClearFacetForDomainEventAbstract(
final PropertyOrCollectionAccessorFacet getterFacet,
final PropertySetterFacet setterFacet,
final PropertyClearFacet clearFacet,
- final PropertyDomainEventFacet propertyDomainEventFacet,
final FacetHolder holder) {
super(facetType, eventType, holder);
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java
index b88d5bdf9a5..ce2b606936b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java
@@ -18,24 +18,12 @@
*/
package org.apache.causeway.core.metamodel.postprocessors.members;
-import java.lang.reflect.Method;
-
import javax.inject.Inject;
-import org.apache.causeway.applib.annotation.Collection;
-import org.apache.causeway.applib.annotation.Property;
-import org.apache.causeway.applib.events.domain.CollectionDomainEvent;
-import org.apache.causeway.applib.events.domain.PropertyDomainEvent;
-import org.apache.causeway.commons.internal.reflection._Annotations;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
-import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin;
-import org.apache.causeway.core.metamodel.facets.FacetedMethod;
import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet;
-import org.apache.causeway.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory;
import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet;
-import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.causeway.core.metamodel.facets.properties.property.PropertyAnnotationFacetFactory;
import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet;
import org.apache.causeway.core.metamodel.postprocessors.ObjectSpecificationPostProcessorAbstract;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
@@ -69,29 +57,10 @@ public void postProcessAction(final ObjectSpecification objectSpecification, fin
public void postProcessProperty(final ObjectSpecification objectSpecification, final OneToOneAssociation property) {
if(property instanceof OneToOneAssociationMixedIn) {
- final OneToOneAssociationMixedIn propertyMixin = (OneToOneAssociationMixedIn) property;
- final FacetedMethod facetedMethod = propertyMixin.getFacetedMethod();
- final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade
-
- {
- // this is basically a subset of the code that is in CollectionAnnotationFacetFactory,
- // ignoring stuff which is deprecated for Causeway v2
-
- final Property propertyAnnot =
- _Annotations.synthesize(method, Property.class)
- .orElse(null);
-
- if(propertyAnnot != null) {
- final Class extends PropertyDomainEvent, ?>> propertyDomainEventType =
- PropertyAnnotationFacetFactory.defaultFromDomainObjectIfRequired(
- objectSpecification, propertyAnnot.domainEvent());
- final PropertyOrCollectionAccessorFacet getterFacetIfAny = null;
- FacetUtil.addFacet(
- new PropertyDomainEventFacet(
- propertyDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, getterFacetIfAny, property));
- }
- }
+ FacetUtil.addFacetIfPresent(
+ PropertyDomainEventFacet.createMixedIn(objectSpecification, (OneToOneAssociationMixedIn)property));
+//TODO[CAUSEWAY-3409] even when this lookup returns empty, we still might need an event-type holding facet
property
.lookupFacet(PropertyDomainEventFacet.class)
.ifPresent(propertyDomainEventFacet->
@@ -103,28 +72,10 @@ public void postProcessProperty(final ObjectSpecification objectSpecification, f
public void postProcessCollection(final ObjectSpecification objectSpecification, final OneToManyAssociation collection) {
if(collection instanceof OneToManyAssociationMixedIn) {
- final OneToManyAssociationMixedIn collectionMixin = (OneToManyAssociationMixedIn) collection;
- final FacetedMethod facetedMethod = collectionMixin.getFacetedMethod();
- final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade
-
- {
- // this is basically a subset of the code that is in CollectionAnnotationFacetFactory,
- // ignoring stuff which is deprecated for Causeway v2
-
- final Collection collectionAnnot =
- _Annotations.synthesize(method, Collection.class)
- .orElse(null);
-
- if(collectionAnnot != null) {
- final Class extends CollectionDomainEvent, ?>> collectionDomainEventType =
- CollectionAnnotationFacetFactory.defaultFromDomainObjectIfRequired(
- objectSpecification, collectionAnnot.domainEvent());
- FacetUtil.addFacet(
- new CollectionDomainEventFacet(
- collectionDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, collection));
- }
- }
+ FacetUtil.addFacetIfPresent(
+ CollectionDomainEventFacet.createMixedIn(objectSpecification, (OneToManyAssociationMixedIn)collection));
+//TODO[CAUSEWAY-3409] even when this lookup returns empty, we still might need an event-type holding facet
collection
.lookupFacet(CollectionDomainEventFacet.class)
.ifPresent(collectionDomainEventFacet->
From c584f243489178f21b2a4f91366294c8dbc29b9c Mon Sep 17 00:00:00 2001
From: Andi Huber
Date: Mon, 17 Apr 2023 12:03:31 +0200
Subject: [PATCH 09/37] CAUSEWAY-3409: simplifies hierarchy for facet
PropertySetterOrClearFacetForDomainEventAbstract
---
.../PropertyAnnotationFacetFactory.java | 48 ++---
... => PropertyClearFacetForDomainEvent.java} | 13 +-
...tForDomainEventFromPropertyAnnotation.java | 38 ----
...=> PropertySetterFacetForDomainEvent.java} | 14 +-
...tForDomainEventFromPropertyAnnotation.java | 39 ----
...terOrClearFacetForDomainEventAbstract.java | 24 ++-
.../PropertyAnnotationFacetFactoryTest.java | 65 ++++---
...etaModelRegressionTest.verify.approved.xml | 182 ++++++++++--------
8 files changed, 176 insertions(+), 247 deletions(-)
rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/{PropertyClearFacetForDomainEventFromDefault.java => PropertyClearFacetForDomainEvent.java} (77%)
delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/{PropertySetterFacetForDomainEventFromDefault.java => PropertySetterFacetForDomainEvent.java} (77%)
delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
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 aa62a8d0f02..fc96f0abb2f 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
@@ -43,11 +43,9 @@
import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty;
import org.apache.causeway.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation;
+import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEvent;
import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation;
+import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEvent;
import org.apache.causeway.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty;
import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation;
@@ -144,38 +142,18 @@ void processModify(final ProcessMethodContext processMethodContext, final Option
// emit the appropriate domain event and then delegate onto the underlying
//
- final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class);
- if(setterFacet != null) {
- // the current setter facet will end up as the underlying facet
- final PropertySetterFacet replacementFacet;
-
- if(eventTypeOrigin.isAnnotatedMember()) {
- replacementFacet = new PropertySetterFacetForDomainEventFromPropertyAnnotation(
- eventType, getterFacet, setterFacet, holder);
- } else {
- // default
- replacementFacet = new PropertySetterFacetForDomainEventFromDefault(
- eventType, getterFacet, setterFacet, holder);
- }
- addFacet(replacementFacet);
- }
-
- final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class);
- if(clearFacet != null) {
- // the current clear facet will end up as the underlying facet
- final PropertyClearFacet replacementFacet;
-
- if(eventTypeOrigin.isAnnotatedMember()) {
- replacementFacet = new PropertyClearFacetForDomainEventFromPropertyAnnotation(
- eventType, getterFacet, clearFacet, holder);
- } else {
- // default
- replacementFacet = new PropertyClearFacetForDomainEventFromDefault(
- eventType, getterFacet, clearFacet, holder);
- }
- addFacet(replacementFacet);
- }
+ holder.lookupFacet(PropertySetterFacet.class)
+ .ifPresent(setterFacet->
+ // the current setter facet will end up as the underlying facet
+ addFacet(new PropertySetterFacetForDomainEvent(
+ eventType, eventTypeOrigin, getterFacet, setterFacet, holder)));
+
+ holder.lookupFacet(PropertyClearFacet.class)
+ .ifPresent(clearFacet->
+ // the current clear facet will end up as the underlying facet
+ addFacet(new PropertyClearFacetForDomainEvent(
+ eventType, eventTypeOrigin, getterFacet, clearFacet, holder)));
});
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEvent.java
similarity index 77%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEvent.java
index d513a87b969..025f328b6fd 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEvent.java
@@ -23,16 +23,17 @@
import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
-public class PropertyClearFacetForDomainEventFromDefault
+public class PropertyClearFacetForDomainEvent
extends PropertySetterOrClearFacetForDomainEventAbstract
implements PropertyClearFacet {
- public PropertyClearFacetForDomainEventFromDefault(
+ public PropertyClearFacetForDomainEvent(
final Class extends PropertyDomainEvent, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertyClearFacet clearFacet,
- final FacetHolder holder) {
+ final EventTypeOrigin eventTypeOrigin,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertyClearFacet clearFacet,
+ final FacetHolder holder) {
- super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder);
+ super(PropertyClearFacet.class, eventType, eventTypeOrigin, getterFacet, null, clearFacet, holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
deleted file mode 100644
index abb9d80b666..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.metamodel.facets.properties.property.modify;
-
-import org.apache.causeway.applib.events.domain.PropertyDomainEvent;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
-
-public class PropertyClearFacetForDomainEventFromPropertyAnnotation
-extends PropertySetterOrClearFacetForDomainEventAbstract
-implements PropertyClearFacet {
-
- public PropertyClearFacetForDomainEventFromPropertyAnnotation(
- final Class extends PropertyDomainEvent, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertyClearFacet clearFacet,
- final FacetHolder holder) {
-
- super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder);
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEvent.java
similarity index 77%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEvent.java
index 754a31c2cf9..ade1fa2df24 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEvent.java
@@ -23,18 +23,18 @@
import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-public class PropertySetterFacetForDomainEventFromDefault
+public class PropertySetterFacetForDomainEvent
extends PropertySetterOrClearFacetForDomainEventAbstract
implements PropertySetterFacet {
-
- public PropertySetterFacetForDomainEventFromDefault(
+ public PropertySetterFacetForDomainEvent(
final Class extends PropertyDomainEvent, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final FacetHolder holder) {
+ final EventTypeOrigin eventTypeOrigin,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertySetterFacet setterFacet,
+ final FacetHolder holder) {
- super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder);
+ super(PropertySetterFacet.class, eventType, eventTypeOrigin, getterFacet, setterFacet, null, holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
deleted file mode 100644
index 77351e625e5..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.metamodel.facets.properties.property.modify;
-
-import org.apache.causeway.applib.events.domain.PropertyDomainEvent;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-
-public class PropertySetterFacetForDomainEventFromPropertyAnnotation
-extends PropertySetterOrClearFacetForDomainEventAbstract
-implements PropertySetterFacet {
-
-
- public PropertySetterFacetForDomainEventFromPropertyAnnotation(
- final Class extends PropertyDomainEvent, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final FacetHolder holder) {
-
- super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder);
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index cf961e6a78a..2306ba8e274 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -28,8 +28,8 @@
import org.apache.causeway.core.metamodel.execution.InteractionInternal;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract;
import org.apache.causeway.core.metamodel.facets.DomainEventHelper;
-import org.apache.causeway.core.metamodel.facets.SingleValueFacetAbstract;
import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearingAccessor;
@@ -48,7 +48,7 @@
import lombok.val;
public abstract class PropertySetterOrClearFacetForDomainEventAbstract
-extends SingleValueFacetAbstract>>
+extends DomainEventFacetAbstract>
implements
PropertyClearingAccessor,
PropertySettingAccessor {
@@ -62,12 +62,13 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
protected PropertySetterOrClearFacetForDomainEventAbstract(
final Class extends Facet> facetType,
final Class extends PropertyDomainEvent, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final PropertyClearFacet clearFacet,
- final FacetHolder holder) {
+ final EventTypeOrigin eventTypeOrigin,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertySetterFacet setterFacet,
+ final PropertyClearFacet clearFacet,
+ final FacetHolder holder) {
- super(facetType, eventType, holder);
+ super(facetType, eventType, eventTypeOrigin, holder);
this.getterFacet = getterFacet;
this.setterFacet = setterFacet;
this.clearFacet = clearFacet;
@@ -198,7 +199,7 @@ public Object execute(final PropertyEdit currentExecution) {
val propertyDomainEvent =
domainEventHelper.postEventForProperty(
AbstractDomainEvent.Phase.EXECUTING,
- PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType(), null,
+ uncheckedCast(PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType()), null,
PropertySetterOrClearFacetForDomainEventAbstract.this.getFacetHolder(), head,
oldValuePojo, newValuePojo);
@@ -224,7 +225,8 @@ public Object execute(final PropertyEdit currentExecution) {
// ... post the executed event
domainEventHelper.postEventForProperty(
AbstractDomainEvent.Phase.EXECUTED,
- PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType(), uncheckedCast(propertyDomainEvent),
+ uncheckedCast(PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType()),
+ uncheckedCast(propertyDomainEvent),
PropertySetterOrClearFacetForDomainEventAbstract.this.getFacetHolder(), head,
oldValuePojo, actualNewValue);
}
@@ -278,10 +280,6 @@ private ManagedObject doSetOrClearProperty(
);
}
- public Class extends PropertyDomainEvent> getEventType() {
- return uncheckedCast(value());
- }
-
private InteractionDtoFactory getInteractionDtoServiceInternal() {
return getServiceRegistry().lookupServiceElseFail(InteractionDtoFactory.class);
}
diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index aed7c85b9bd..a74d9e17d00 100644
--- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -30,6 +30,7 @@
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -50,6 +51,7 @@
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase;
+import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin;
import org.apache.causeway.core.metamodel.facets.FacetFactory;
import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext;
import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
@@ -65,11 +67,9 @@
import org.apache.causeway.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation;
+import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEvent;
import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault;
-import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation;
+import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEvent;
import org.apache.causeway.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation;
import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation;
@@ -236,17 +236,18 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {}
// then
final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class);
assertNotNull(setterFacet);
- assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromPropertyAnnotation,
- "unexpected facet: " + setterFacet);
- final PropertySetterFacetForDomainEventFromPropertyAnnotation setterFacetImpl = (PropertySetterFacetForDomainEventFromPropertyAnnotation) setterFacet;
- assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
+ assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet);
+ final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet;
+ assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin());
+ assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
// then
final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class);
assertNotNull(clearFacet);
- assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromPropertyAnnotation);
- final PropertyClearFacetForDomainEventFromPropertyAnnotation clearFacetImpl = (PropertyClearFacetForDomainEventFromPropertyAnnotation) clearFacet;
- assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
+ assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent);
+ final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet;
+ assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin());
+ assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
}
@@ -284,17 +285,18 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {}
// then
final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class);
assertNotNull(setterFacet);
- assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromPropertyAnnotation,
- "unexpected facet: " + setterFacet);
- final PropertySetterFacetForDomainEventFromPropertyAnnotation setterFacetImpl = (PropertySetterFacetForDomainEventFromPropertyAnnotation) setterFacet;
- assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
+ assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet);
+ final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet;
+ assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin());
+ assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
// then
final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class);
assertNotNull(clearFacet);
- assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromPropertyAnnotation);
- final PropertyClearFacetForDomainEventFromPropertyAnnotation clearFacetImpl = (PropertyClearFacetForDomainEventFromPropertyAnnotation) clearFacet;
- assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
+ assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent);
+ final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet;
+ assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin());
+ assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
}
@Test
@@ -332,17 +334,18 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {
// then
final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class);
assertNotNull(setterFacet);
- assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromPropertyAnnotation,
- "unexpected facet: " + setterFacet);
- final PropertySetterFacetForDomainEventFromPropertyAnnotation setterFacetImpl = (PropertySetterFacetForDomainEventFromPropertyAnnotation) setterFacet;
- assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
+ assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet);
+ final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet;
+ assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin());
+ assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
// then
final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class);
assertNotNull(clearFacet);
- assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromPropertyAnnotation);
- final PropertyClearFacetForDomainEventFromPropertyAnnotation clearFacetImpl = (PropertyClearFacetForDomainEventFromPropertyAnnotation) clearFacet;
- assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
+ assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent);
+ final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet;
+ assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin());
+ assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class));
}
@Test
@@ -380,17 +383,17 @@ class Customer {
// then
final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class);
assertNotNull(setterFacet);
- assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromDefault,
+ assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent,
"unexpected facet: " + setterFacet);
- final PropertySetterFacetForDomainEventFromDefault setterFacetImpl = (PropertySetterFacetForDomainEventFromDefault) setterFacet;
- assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class));
+ final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet;
+ assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class));
// then
final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class);
assertNotNull(clearFacet);
- assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromDefault);
- final PropertyClearFacetForDomainEventFromDefault clearFacetImpl = (PropertyClearFacetForDomainEventFromDefault) clearFacet;
- assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class));
+ assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent);
+ final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet;
+ assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class));
}
}
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml
index 738a027adeb..98c6cf0af6a 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml
@@ -6379,12 +6379,13 @@