This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch 3409-mixin.eventtypes in repository https://gitbox.apache.org/repos/asf/causeway.git
commit da5f3fa615b02556a71046f575b5cdc3a566cc6d Author: andi-huber <[email protected]> AuthorDate: Sat Apr 15 16:25:18 2023 +0200 CAUSEWAY-3409: simplify event-type related facets --- .../applib/events/domain/AbstractDomainEvent.java | 26 +++++++------ .../applib/events/domain/ActionDomainEvent.java | 14 ------- ...Abstract.java => DomainEventFacetAbstract.java} | 41 ++++++++++---------- .../core/metamodel/facets/DomainEventHelper.java | 18 ++++----- .../facets/SingleClassValueFacetAbstract.java | 2 +- .../action/ActionAnnotationFacetFactory.java | 4 ++ .../action/invocation/ActionDomainEventFacet.java | 3 +- .../invocation/ActionDomainEventFacetAbstract.java | 16 ++------ .../invocation/ActionDomainEventFacetDefault.java | 1 - ...ctionInvocationFacetForDomainEventAbstract.java | 2 +- .../modify/CollectionDomainEventFacet.java | 3 +- .../modify/CollectionDomainEventFacetAbstract.java | 27 +++---------- ...EventDefaultFacetForDomainObjectAnnotation.java | 11 +----- ...EventDefaultFacetForDomainObjectAnnotation.java | 12 ++---- ...EventDefaultFacetForDomainObjectAnnotation.java | 10 +---- .../property/modify/PropertyDomainEventFacet.java | 3 +- .../modify/PropertyDomainEventFacetAbstract.java | 44 +++++++++------------- .../metamodel/interactions/InteractionHead.java | 4 +- .../TweakDomainEventsForMixinPostProcessor.java | 37 +++++++++--------- .../core/metamodel/spec/feature/ObjectAction.java | 2 +- .../PropertyAnnotationFacetFactoryTest.java | 6 +-- 21 files changed, 108 insertions(+), 178 deletions(-) diff --git a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java index ba20e5388f..2df31e83d1 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java @@ -119,24 +119,26 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> { * </p> */ @Getter - private Object mixedIn; + private Object mixee; /** * Not API - set by the framework. */ - public void setMixedIn(final Object mixedIn) { - this.mixedIn = mixedIn; + public final void setMixee(final Object mixee) { + this.mixee = mixee; } /** * The subject of the event, which will be either the * {@link #getSource() source} for a regular action, or the - * {@link #getMixedIn() mixed-in} domain object for a mixin. + * {@link #getMixee() mixed-in} domain object for a mixin. */ public <T> T getSubject() { - val mixedIn = getMixedIn(); - val mixedInElseSource = mixedIn != null ? mixedIn : getSource(); + val mixee = getMixee(); + val mixedInElseSource = mixee != null + ? mixee + : getSource(); return _Casts.uncheckedCast(mixedInElseSource); } @@ -194,7 +196,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> { /** * Not API, set by the framework. */ - public void setEventPhase(final Phase phase) { + public final void setEventPhase(final Phase phase) { this.eventPhase = phase; } @@ -208,7 +210,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> { /** * Not API, set by the framework if the no-arg constructor is used. */ - public void setIdentifier(final Identifier identifier) { + public final void setIdentifier(final Identifier identifier) { this.identifier = identifier; } @@ -226,7 +228,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> { * * @see #veto(String, Object...) */ - public void hide() { + public final void hide() { this.hidden = true; } @@ -275,7 +277,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> { * @see #disable(org.apache.causeway.applib.services.i18n.TranslatableString) * @see #veto(String, Object...) */ - public void disable(final String reason) { + public final void disable(final String reason) { this.disabledReason = reason; } @@ -286,7 +288,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> { * @see #disable(java.lang.String) * @see #veto(org.apache.causeway.applib.services.i18n.TranslatableString) */ - public void disable(final TranslatableString reason) { + public final void disable(final TranslatableString reason) { this.disabledReasonTranslatable = reason; } @@ -478,7 +480,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> { * * Set user-data, for the use of a subsequent {@link #getEventPhase() phase}. */ - public void put(final Object key, final Object value) { + public final void put(final Object key, final Object value) { userData.put(key, value); } diff --git a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java index 0fe33d3b7f..76b50c2ee0 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java @@ -139,12 +139,6 @@ public abstract class ActionDomainEvent<S> extends AbstractDomainEvent<S> { @Getter private List<Class<?>> parameterTypes; - /** - * Populated only for mixins; holds the underlying domain object that the mixin contributes to. - */ - @Getter - private Object mixedIn; - /** * The arguments being used to invoke the action. * @@ -208,14 +202,6 @@ public abstract class ActionDomainEvent<S> extends AbstractDomainEvent<S> { public void setParameterTypes(final List<Class<?>> parameterTypes) { this.parameterTypes = parameterTypes; } - /** - * @apiNote : NOT API, set by the framework - */ - @Override - public void setMixedIn(final Object mixedIn) { - this.mixedIn = mixedIn; - } - private static final ToString<ActionDomainEvent<?>> toString = ObjectContracts.<ActionDomainEvent<?>> toString("source", ActionDomainEvent::getSource) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java similarity index 64% copy from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java copy to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java index f70e2cd718..700e5e1f23 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java @@ -23,48 +23,45 @@ import java.util.function.BiConsumer; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import lombok.NonNull; -public abstract class SingleClassValueFacetAbstract -extends FacetAbstract -implements SingleClassValueFacet { +public abstract class DomainEventFacetAbstract<T> +extends FacetAbstract { - private final Class<?> value; + private final Class<? extends T> eventType; - public SingleClassValueFacetAbstract( + protected DomainEventFacetAbstract( final Class<? extends Facet> facetType, final FacetHolder holder, - final Class<?> value) { + final Class<? extends T> eventType) { super(facetType, holder); - this.value = value; + this.eventType = eventType; } - @Override - public Class<?> value() { - return value; + public final Class<? extends T> getEventType() { + return eventType; } - /** - * The {@link ObjectSpecification} of the {@link #value()}. - */ - @Override - public ObjectSpecification valueSpec() { - final Class<?> valueType = value(); - return valueType != null ? getSpecificationLoader().loadSpecification(valueType) : null; - } +// /** +// * The {@link ObjectSpecification} of the {@link #value()}. +// */ +// @Override +// public ObjectSpecification valueSpec() { +// final Class<?> valueType = value(); +// return valueType != null ? getSpecificationLoader().loadSpecification(valueType) : null; +// } @Override public void visitAttributes(final BiConsumer<String, Object> visitor) { super.visitAttributes(visitor); - visitor.accept("value", value()); + visitor.accept("eventType", getEventType()); } @Override public boolean semanticEquals(final @NonNull Facet other) { - return other instanceof SingleClassValueFacet - ? this.value() == ((SingleClassValueFacet)other).value() + return other instanceof DomainEventFacetAbstract + ? this.getEventType() == ((DomainEventFacetAbstract<?>)other).getEventType() : false; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java index a7dafe25b2..e23619b2d1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java @@ -125,10 +125,10 @@ public class DomainEventHelper { final Identifier identifier = facetHolder.getFeatureIdentifier(); event = newActionDomainEvent(eventType, identifier, source, arguments); - // copy over if have - head.getMixedIn() + // copy over if mixee is present + head.getMixee() .ifPresent(mixedInAdapter-> - event.setMixedIn(mixedInAdapter.getPojo())); + event.setMixee(mixedInAdapter.getPojo())); if(objectAction != null) { // should always be the case... @@ -251,9 +251,9 @@ public class DomainEventHelper { event = newPropertyDomainEvent(eventType, identifier, source, oldValue, newValue); // copy over if have - head.getMixedIn() - .ifPresent(mixedInAdapter-> - event.setMixedIn(mixedInAdapter.getPojo())); + head.getMixee() + .ifPresent(mixeeAdapter-> + event.setMixee(mixeeAdapter.getPojo())); } @@ -343,9 +343,9 @@ public class DomainEventHelper { event = newCollectionDomainEvent(eventType, phase, identifier, source); // copy over if have - head.getMixedIn() - .ifPresent(mixedInAdapter-> - event.setMixedIn(mixedInAdapter.getPojo())); + head.getMixee() + .ifPresent(mixeeAdapter-> + event.setMixee(mixeeAdapter.getPojo())); event.setEventPhase(phase); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java index f70e2cd718..ab5c676d97 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java @@ -33,7 +33,7 @@ implements SingleClassValueFacet { private final Class<?> value; - public SingleClassValueFacetAbstract( + protected SingleClassValueFacetAbstract( final Class<? extends Facet> facetType, final FacetHolder holder, final Class<?> value) { 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 af4ddfcfc6..a8ccbfbd21 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 @@ -25,6 +25,7 @@ import javax.inject.Inject; import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.mixins.system.HasInteractionId; +import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; @@ -113,6 +114,9 @@ extends FacetFactoryAbstract { val typeSpec = getSpecificationLoader().loadSpecification(cls); val holder = processMethodContext.getFacetHolder(); + //FIXME[CAUSEWAY-3409] + _Assert.assertFalse(typeSpec.isMixin(), ()->"we need the mixee instead"); + // // Set up ActionDomainEventFacet, which will act as the hiding/disabling/validating advisor // diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java index 87bcc3c7c0..53ccb2d31d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java @@ -18,7 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action.invocation; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacet; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor; @@ -27,7 +26,7 @@ import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvi * Corresponds to <tt>@Action(domainEvent=...)</tt> annotation in the Causeway programming model. */ public interface ActionDomainEventFacet -extends SingleClassValueFacet, HidingInteractionAdvisor, DisablingInteractionAdvisor, +extends HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor { } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java index eb3e5a8ff0..89039f90f3 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java @@ -29,8 +29,8 @@ import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; 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.SingleClassValueFacetAbstract; import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext; import org.apache.causeway.core.metamodel.interactions.ActionValidityContext; import org.apache.causeway.core.metamodel.interactions.InteractionContext; @@ -39,24 +39,19 @@ import org.apache.causeway.core.metamodel.interactions.ValidityContext; import org.apache.causeway.core.metamodel.interactions.VisibilityContext; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; -import lombok.Getter; -import lombok.Setter; - public abstract class ActionDomainEventFacetAbstract -extends SingleClassValueFacetAbstract +extends DomainEventFacetAbstract<ActionDomainEvent<?>> implements ActionDomainEventFacet { - @Getter @Setter private Class<? extends ActionDomainEvent<?>> eventType; private final TranslationService translationService; private final TranslationContext translationContext; private final DomainEventHelper domainEventHelper; - public ActionDomainEventFacetAbstract( + protected ActionDomainEventFacetAbstract( final Class<? extends ActionDomainEvent<?>> eventType, final FacetHolder holder) { super(ActionDomainEventFacet.class, holder, eventType); - setEventType(eventType); this.translationService = getTranslationService(); this.translationContext = holder.getTranslationContext(); @@ -64,11 +59,6 @@ implements ActionDomainEventFacet { domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - @Override - public Class<?> value() { - return eventType; - } - @Override public String hides(final VisibilityContext ic) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java index 311f7c3a4f..99ae808905 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java @@ -28,5 +28,4 @@ public class ActionDomainEventFacetDefault extends ActionDomainEventFacetAbstrac super(eventType, holder); } - } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java index 2fa08e526d..23a668da28 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java @@ -65,7 +65,7 @@ implements ImperativeFacet { private final ServiceRegistry serviceRegistry; private final DomainEventHelper domainEventHelper; - public ActionInvocationFacetForDomainEventAbstract( + protected ActionInvocationFacetForDomainEventAbstract( final Class<? extends ActionDomainEvent<?>> eventType, final MethodFacade method, final ObjectSpecification declaringType, diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index 68871f9fc0..c59dc19463 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -18,14 +18,13 @@ */ package org.apache.causeway.core.metamodel.facets.collections.collection.modify; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacet; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; /** * Corresponds to <tt>@Collection(domainEvent=...)</tt> annotation in the Causeway programming model. */ public interface CollectionDomainEventFacet -extends SingleClassValueFacet, HidingInteractionAdvisor { +extends HidingInteractionAdvisor { } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java index 573034371f..3be7077170 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java @@ -22,48 +22,31 @@ import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.commons.internal.base._Casts; 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.SingleClassValueFacetAbstract; import org.apache.causeway.core.metamodel.interactions.VisibilityContext; public abstract class CollectionDomainEventFacetAbstract - extends SingleClassValueFacetAbstract - implements CollectionDomainEventFacet { +extends DomainEventFacetAbstract<CollectionDomainEvent<?, ?>> +implements CollectionDomainEventFacet { private final DomainEventHelper domainEventHelper; public CollectionDomainEventFacetAbstract( final Class<? extends CollectionDomainEvent<?, ?>> eventType, - final FacetHolder holder) { + final FacetHolder holder) { super(CollectionDomainEventFacet.class, holder, eventType); - this.eventType = eventType; - domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - private Class<? extends CollectionDomainEvent<?, ?>> eventType; - - @Override - public Class<?> value() { - return eventType; - } - - public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() { - return _Casts.uncheckedCast(eventType); - } - - public void setEventType(final Class<? extends CollectionDomainEvent<?, ?>> eventType) { - this.eventType = eventType; - } - @Override public String hides(final VisibilityContext ic) { final CollectionDomainEvent<?, ?> event = domainEventHelper.postEventForCollection( AbstractDomainEvent.Phase.HIDE, - getEventType(), + _Casts.uncheckedCast(getEventType()), getFacetHolder(), ic.getHead() ); if (event != null && event.isHidden()) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java index 0abd2ee326..0db87e591c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -21,7 +21,7 @@ package org.apache.causeway.core.metamodel.facets.object.domainobject.domaineven import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; /** @@ -29,13 +29,7 @@ import org.apache.causeway.core.metamodel.facets.actions.action.invocation.Actio * for any actions as a fallback/default. */ public class ActionDomainEventDefaultFacetForDomainObjectAnnotation -extends SingleClassValueFacetAbstract { - - - private final Class<? extends ActionDomainEvent<?>> eventType; - public Class<? extends ActionDomainEvent<?>> getEventType() { - return eventType; - } +extends DomainEventFacetAbstract<ActionDomainEvent<?>> { private static Class<? extends Facet> type() { return ActionDomainEventDefaultFacetForDomainObjectAnnotation.class; @@ -45,7 +39,6 @@ extends SingleClassValueFacetAbstract { final FacetHolder holder, final Class<? extends ActionDomainEvent<?>> value) { super(type(), holder, value); - this.eventType = value; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java index 97516bdb6e..2213468eff 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -21,7 +21,7 @@ package org.apache.causeway.core.metamodel.facets.object.domainobject.domaineven import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; /** @@ -29,12 +29,7 @@ import org.apache.causeway.core.metamodel.facets.actions.action.invocation.Actio * for any actions as a fallback/default. */ public class CollectionDomainEventDefaultFacetForDomainObjectAnnotation -extends SingleClassValueFacetAbstract { - - private final Class<? extends CollectionDomainEvent<?, ?>> eventType; - public Class<? extends CollectionDomainEvent<?, ?>> getEventType() { - return eventType; - } +extends DomainEventFacetAbstract<CollectionDomainEvent<?, ?>> { private static Class<? extends Facet> type() { return CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class; @@ -42,9 +37,8 @@ extends SingleClassValueFacetAbstract { public CollectionDomainEventDefaultFacetForDomainObjectAnnotation( final FacetHolder holder, - final Class<? extends CollectionDomainEvent<?,?>> value) { + final Class<? extends CollectionDomainEvent<?, ?>> value) { super(type(), holder, value); - this.eventType = value; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java index 8b8a7ae038..7820dbb5be 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -21,7 +21,7 @@ package org.apache.causeway.core.metamodel.facets.object.domainobject.domaineven import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; /** @@ -29,12 +29,7 @@ import org.apache.causeway.core.metamodel.facets.actions.action.invocation.Actio * for any actions as a fallback/default. */ public class PropertyDomainEventDefaultFacetForDomainObjectAnnotation -extends SingleClassValueFacetAbstract { - - private final Class<? extends PropertyDomainEvent<?, ?>> eventType; - public Class<? extends PropertyDomainEvent<?, ?>> getEventType() { - return eventType; - } +extends DomainEventFacetAbstract<PropertyDomainEvent<?, ?>> { private static Class<? extends Facet> type() { return PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class; @@ -44,7 +39,6 @@ extends SingleClassValueFacetAbstract { final FacetHolder holder, final Class<? extends PropertyDomainEvent<?,?>> value) { super(type(), holder, value); - this.eventType = value; } } 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 35755e3b4f..0a962bd89e 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,7 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property.modify; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacet; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor; @@ -27,6 +26,6 @@ import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvi * Corresponds to <tt>@Property(domainEvent=...)</tt> annotation in the Causeway programming model. */ public interface PropertyDomainEventFacet -extends SingleClassValueFacet, HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor { +extends HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor { } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java index 614a515af7..9bd94b6427 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java @@ -21,7 +21,6 @@ package org.apache.causeway.core.metamodel.facets.properties.property.modify; import java.util.Optional; import java.util.function.BiConsumer; -import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.applib.services.i18n.TranslatableString; @@ -30,8 +29,8 @@ import org.apache.causeway.applib.services.i18n.TranslationService; import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; 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.SingleClassValueFacetAbstract; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.interactions.ProposedHolder; import org.apache.causeway.core.metamodel.interactions.UsabilityContext; @@ -41,7 +40,8 @@ import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; public abstract class PropertyDomainEventFacetAbstract -extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { +extends DomainEventFacetAbstract<PropertyDomainEvent<?, ?>> +implements PropertyDomainEventFacet { private final DomainEventHelper domainEventHelper; @@ -54,11 +54,10 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { */ public PropertyDomainEventFacetAbstract( final Class<? extends PropertyDomainEvent<?, ?>> eventType, - final PropertyOrCollectionAccessorFacet getterFacetIfAny, - final FacetHolder holder ) { + final PropertyOrCollectionAccessorFacet getterFacetIfAny, + final FacetHolder holder ) { super(PropertyDomainEventFacet.class, holder, eventType); - this.eventType = eventType; this.getterFacetIfAny = getterFacetIfAny; this.translationService = getTranslationService(); @@ -67,24 +66,15 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - private Class<? extends PropertyDomainEvent<?, ?>> eventType; - - @Override - public Class<?> value() { - return eventType; - } - - public <S, T> Class<? extends PropertyDomainEvent<S, T>> getEventType() { - return _Casts.uncheckedCast(eventType); - } - - /** - * Can be overwritten if this facet is on a mixin where the subject (mixedInType) is annotated with - * {@link DomainObject#propertyDomainEvent()}. - */ - public void setEventType(final Class<? extends PropertyDomainEvent<?, ?>> eventType) { - this.eventType = eventType; - } +// private Class<? extends PropertyDomainEvent<?, ?>> eventType; +// +// /** +// * Can be overwritten if this facet is on a mixin where the subject (mixedInType) is annotated with +// * {@link DomainObject#propertyDomainEvent()}. +// */ +// public void setEventType(final Class<? extends PropertyDomainEvent<?, ?>> eventType) { +// this.eventType = eventType; +// } @Override public String hides(final VisibilityContext ic) { @@ -92,7 +82,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { final PropertyDomainEvent<?, ?> event = domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.HIDE, - getEventType(), null, + _Casts.uncheckedCast(getEventType()), null, getFacetHolder(), ic.getHead(), null, null); if (event != null && event.isHidden()) { @@ -107,7 +97,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { final PropertyDomainEvent<?, ?> event = domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.DISABLE, - getEventType(), null, + _Casts.uncheckedCast(getEventType()), null, getFacetHolder(), ic.getHead(), null, null); if (event != null @@ -144,7 +134,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { final PropertyDomainEvent<?, ?> event = domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.VALIDATE, - getEventType(), null, + _Casts.uncheckedCast(getEventType()), null, getFacetHolder(), ic.getHead(), oldValue, proposedValue); if (event != null && event.isInvalid()) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java index a1af639dc6..2586c896c9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java @@ -63,9 +63,9 @@ public class InteractionHead { /** * as used by the domain event subsystem - * @return optionally the owner, based on whether the target is a mixin + * @return optionally the owner (mixee), based on whether the target is a mixin */ - public Optional<ManagedObject> getMixedIn() { + public Optional<ManagedObject> getMixee() { return Objects.equals(getOwner(), getTarget()) ? Optional.empty() : Optional.of(getOwner()); 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 d6913e8154..f2a12f74e4 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 @@ -27,6 +27,7 @@ import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.applib.events.domain.PropertyDomainEvent; +import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; @@ -50,7 +51,6 @@ import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; -import org.apache.causeway.core.metamodel.specloader.specimpl.ObjectActionMixedIn; import org.apache.causeway.core.metamodel.specloader.specimpl.OneToManyAssociationMixedIn; import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; @@ -65,23 +65,22 @@ extends ObjectSpecificationPostProcessorAbstract { @Override public void postProcessAction(final ObjectSpecification objectSpecification, final ObjectAction objectAction) { - if(objectAction instanceof ObjectActionMixedIn) { + if(objectAction.isMixedIn()) { // unlike collection and property mixins, there is no need to create the DomainEventFacet, it will // have been created in the ActionAnnotationFacetFactory - final ActionDomainEventDefaultFacetForDomainObjectAnnotation actionDomainEventDefaultFacet = - objectSpecification.getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class); - - if(actionDomainEventDefaultFacet != null) { - final ObjectActionMixedIn actionMixedIn = (ObjectActionMixedIn) objectAction; - final ActionDomainEventFacet actionFacet = actionMixedIn.getFacet(ActionDomainEventFacet.class); - if (actionFacet instanceof ActionDomainEventFacetAbstract) { - final ActionDomainEventFacetAbstract facetAbstract = (ActionDomainEventFacetAbstract) actionFacet; - if (facetAbstract.getEventType() == ActionDomainEvent.Default.class) { - final ActionDomainEventFacetAbstract existing = (ActionDomainEventFacetAbstract) actionFacet; - existing.setEventType(actionDomainEventDefaultFacet.getEventType()); - } - } - } + + objectSpecification.lookupFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class) + .ifPresent(actionDomainEventDefaultFacet->{ + _Casts.castTo( + ActionDomainEventFacetAbstract.class, + objectAction.getFacet(ActionDomainEventFacet.class)) + .filter(actionDomainEventFacetAbstract-> + actionDomainEventFacetAbstract.getEventType() == ActionDomainEvent.Default.class) + .ifPresent(actionDomainEventFacetAbstract->{ + //FIXME[CAUSEWAY-3409] + //actionDomainEventFacetAbstract.setEventType(actionDomainEventDefaultFacet.getEventType()); + }); + }); } } @@ -119,7 +118,8 @@ extends ObjectSpecificationPostProcessorAbstract { final PropertyDomainEventFacetAbstract facetAbstract = (PropertyDomainEventFacetAbstract) propertyFacet; if (facetAbstract.getEventType() == PropertyDomainEvent.Default.class) { final PropertyDomainEventFacetAbstract existing = (PropertyDomainEventFacetAbstract) propertyFacet; - existing.setEventType(propertyDomainEventDefaultFacet.getEventType()); + //FIXME[CAUSEWAY-3409] + //existing.setEventType(propertyDomainEventDefaultFacet.getEventType()); } } } @@ -159,7 +159,8 @@ extends ObjectSpecificationPostProcessorAbstract { final CollectionDomainEventFacetAbstract facetAbstract = (CollectionDomainEventFacetAbstract) collectionFacet; if (facetAbstract.getEventType() == CollectionDomainEvent.Default.class) { final CollectionDomainEventFacetAbstract existing = (CollectionDomainEventFacetAbstract) collectionFacet; - existing.setEventType(collectionDomainEventDefaultFacet.getEventType()); + //FIXME[CAUSEWAY-3409] + //existing.setEventType(collectionDomainEventDefaultFacet.getEventType()); } } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java index 29eec9ce69..263d0ca750 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java @@ -404,7 +404,7 @@ public interface ObjectAction extends ObjectMember { final @NonNull ObjectAction action, final @NonNull InteractionHead head) { - val mixeeAdapter = head.getMixedIn().orElse(null); + val mixeeAdapter = head.getMixee().orElse(null); if(mixeeAdapter != null) { val mixinSpec = action.getDeclaringType(); 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 ab41ab31ac..dea0d8c5de 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 @@ -279,7 +279,7 @@ class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJupiterTest assertNotNull(domainEventFacet); assertTrue(domainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation); final PropertyDomainEventFacetForPropertyAnnotation domainEventFacetImpl = (PropertyDomainEventFacetForPropertyAnnotation) domainEventFacet; - assertThat(domainEventFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); @@ -326,7 +326,7 @@ class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJupiterTest assertNotNull(domainEventFacet); assertTrue(domainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation); final PropertyDomainEventFacetForPropertyAnnotation domainEventFacetImpl = (PropertyDomainEventFacetForPropertyAnnotation) domainEventFacet; - MatcherAssert.assertThat(domainEventFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + MatcherAssert.assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); @@ -373,7 +373,7 @@ class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJupiterTest assertNotNull(domainEventFacet); assertTrue(domainEventFacet instanceof PropertyDomainEventFacetDefault); final PropertyDomainEventFacetDefault domainEventFacetImpl = (PropertyDomainEventFacetDefault) domainEventFacet; - assertThat(domainEventFacetImpl.value(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class);
