This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch 3752-appfeat.filter.spi-a in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 607d9119371b27012499d7d05073bfab25d82bc9 Author: andi-huber <[email protected]> AuthorDate: Sun Dec 7 13:02:20 2025 +0100 CAUSEWAY-3752: working on object visibility (1) --- .../core/metamodel/execution/ActionExecutor.java | 21 +++++++----- .../metamodel/execution/MemberExecutorService.java | 8 +++-- .../action/invocation/ActionInvocationFacet.java | 4 ++- .../invocation/ActionInvocationFacetForAction.java | 6 ++-- ...ocationFacetForMixedInPropertyOrCollection.java | 6 ++-- .../facets/object/value/CompositeValueUpdater.java | 9 ++++-- .../accessor/PropertyAccessorFacetViaAccessor.java | 3 +- .../interactions/VisibilityConstraint.java | 8 ----- .../interactions/managed/ManagedAction.java | 2 +- .../core/metamodel/object/MmVisibilityUtils.java | 8 +++-- .../metamodel/spec/feature/HasObjectAction.java | 5 +-- .../core/metamodel/spec/feature/ObjectAction.java | 3 +- .../metamodel/spec/impl/ObjectActionDefault.java | 13 +++++--- .../metamodel/spec/impl/ObjectActionMixedIn.java | 7 ++-- .../spec/impl/OneToManyAssociationMixedIn.java | 8 ++--- .../spec/impl/OneToOneAssociationMixedIn.java | 8 ++--- .../command/CommandExecutorServiceDefault.java | 37 +++++++++------------- .../executor/MemberExecutorServiceDefault.java | 8 +++-- .../handlers/DomainObjectInvocationHandler.java | 2 +- .../testdomain/value/ValueSemanticsTester.java | 6 ++-- .../viewer/commons/model/object/UiObject.java | 5 +-- .../rich/mutation/RichMutationForAction.java | 2 +- .../domain/rich/query/RichActionInvokeResult.java | 2 +- .../simple/mutation/SimpleMutationForAction.java | 2 +- .../model/domain/simple/query/SimpleAction.java | 2 +- .../wicket/ui/pages/obj/DomainObjectPage.java | 20 ++++++------ 26 files changed, 109 insertions(+), 96 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ActionExecutor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ActionExecutor.java index c8363fc6bbf..2aba4eea9d8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ActionExecutor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ActionExecutor.java @@ -23,6 +23,8 @@ import java.util.Objects; import java.util.Optional; +import org.jspecify.annotations.NonNull; + import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.services.bookmark.Bookmark; @@ -42,6 +44,7 @@ import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.ManagedObjects; import org.apache.causeway.core.metamodel.object.MmUnwrapUtils; @@ -52,9 +55,9 @@ import static org.apache.causeway.commons.internal.base._Casts.uncheckedCast; import lombok.Getter; -import org.jspecify.annotations.NonNull; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; +import lombok.experimental.Accessors; @RequiredArgsConstructor //@Slf4j @@ -68,6 +71,7 @@ public final class ActionExecutor public static ActionExecutor forAction( final @NonNull FacetHolder facetHolder, final @NonNull InteractionInitiatedBy interactionInitiatedBy, + final @NonNull WhatViewer whatViewer, final @NonNull InteractionHead head, final @NonNull Can<ManagedObject> argumentAdapters, final @NonNull ObjectAction owningAction, @@ -77,15 +81,14 @@ public static ActionExecutor forAction( "action's parameter count and provided argument count must match"); // guard against malformed argumentAdapters - argumentAdapters.forEach(arg->{if(!ManagedObjects.isSpecified(arg)) { - throw _Exceptions.illegalArgument("arguments must be specified for action %s", owningAction); - }}); + argumentAdapters.forEach(arg->{if(!ManagedObjects.isSpecified(arg)) + throw _Exceptions.illegalArgument("arguments must be specified for action %s", owningAction);}); var method = actionInvocationFacetAbstract.methods().getFirstElseFail(); return new ActionExecutor( owningAction.getMetaModelContext(), facetHolder, - interactionInitiatedBy, owningAction, method, head, argumentAdapters, actionInvocationFacetAbstract); + interactionInitiatedBy, whatViewer, owningAction, method, head, argumentAdapters, actionInvocationFacetAbstract); } // -- CONSTRUCTION @@ -97,6 +100,9 @@ public static ActionExecutor forAction( private final @NonNull FacetHolder facetHolder; @Getter private final @NonNull InteractionInitiatedBy interactionInitiatedBy; + @Getter @Accessors(fluent = true) + private final @NonNull WhatViewer whatViewer; + @Getter private final @NonNull ObjectAction owningAction; @Getter @@ -225,9 +231,8 @@ private Object invokeMethodElseFromCache( ()->CanonicalInvoker.invoke(method, targetPojo, executionParameters), targetPojo.getClass(), method.getName(), targetPojoPlusExecutionParameters); - } else { - return CanonicalInvoker.invoke(method, targetPojo, executionParameters); - } + } else + return CanonicalInvoker.invoke(method, targetPojo, executionParameters); } private static Can<ManagedObject> updateArguments( diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/MemberExecutorService.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/MemberExecutorService.java index 03a5534d839..1e98e91ad61 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/MemberExecutorService.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/MemberExecutorService.java @@ -20,6 +20,8 @@ import java.util.Optional; +import org.jspecify.annotations.NonNull; + import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.exceptions._Exceptions; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; @@ -30,12 +32,11 @@ 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.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; -import org.jspecify.annotations.NonNull; - /** * Used by ActionInvocationFacets and PropertySetterOrClearFacets to submit their executions. * <p> @@ -70,6 +71,7 @@ default InteractionInternal getInteractionElseFail() { default ManagedObject invokeAction( final @NonNull FacetHolder facetHolder, final @NonNull InteractionInitiatedBy interactionInitiatedBy, + final @NonNull WhatViewer whatViewer, final @NonNull InteractionHead head, // action specifics final @NonNull Can<ManagedObject> argumentAdapters, @@ -78,7 +80,7 @@ default ManagedObject invokeAction( var actionExecutor = ActionExecutor.forAction( facetHolder, interactionInitiatedBy, - head, + whatViewer, head, argumentAdapters, owningAction, actionInvocationFacetAbstract); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java index 9b058f37926..c56ff501108 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java @@ -22,6 +22,7 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; @@ -39,7 +40,8 @@ ManagedObject invoke( ObjectAction owningAction, InteractionHead head, Can<ManagedObject> argumentAdapters, - InteractionInitiatedBy interactionInitiatedBy); + InteractionInitiatedBy interactionInitiatedBy, + WhatViewer whatViewer); ObjectSpecification getReturnType(); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForAction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForAction.java index 91abed72ce2..1b07c32348d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForAction.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForAction.java @@ -25,6 +25,7 @@ import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.DomainEventHolder; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; @@ -51,10 +52,11 @@ public ManagedObject invoke( final ObjectAction owningAction, final InteractionHead head, final Can<ManagedObject> argumentAdapters, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { return memberExecutorService.invokeAction(facetHolder(), interactionInitiatedBy, - head, argumentAdapters, owningAction, this); + whatViewer, head, argumentAdapters, owningAction, this); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForMixedInPropertyOrCollection.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForMixedInPropertyOrCollection.java index 95cdea4e04b..7799d89bfdb 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForMixedInPropertyOrCollection.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForMixedInPropertyOrCollection.java @@ -28,6 +28,7 @@ import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; @@ -61,9 +62,10 @@ public ManagedObject invoke( final ObjectAction owningAction, final InteractionHead head, final Can<ManagedObject> argumentAdapters, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { return memberExecutorService.invokeAction(facetHolder(), interactionInitiatedBy, - head, argumentAdapters, owningAction, this); + whatViewer, head, argumentAdapters, owningAction, this); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java index c9047ba29ac..3a3c69c1bb4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java @@ -34,6 +34,7 @@ import org.apache.causeway.core.metamodel.facets.object.value.CompositeValueUpdater.CompositeValueUpdaterForProperty; import org.apache.causeway.core.metamodel.interactions.InteractionHead; import org.apache.causeway.core.metamodel.interactions.VisibilityConstraint; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.interactions.managed.ManagedProperty; import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel; import org.apache.causeway.core.metamodel.object.ManagedObject; @@ -75,13 +76,15 @@ default CompositeValueUpdater overrideFacets() { @Override default ManagedObject execute( final InteractionHead head, final Can<ManagedObject> parameters, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { return map(simpleExecute(head, parameters)); } @Override default ManagedObject executeWithRuleChecking( final InteractionHead head, final Can<ManagedObject> parameters, - final InteractionInitiatedBy interactionInitiatedBy, final VisibilityConstraint visibilityConstraint) throws AuthorizationException { - return execute(head, parameters, interactionInitiatedBy); + final InteractionInitiatedBy interactionInitiatedBy, + final VisibilityConstraint visibilityConstraint) throws AuthorizationException { + return execute(head, parameters, interactionInitiatedBy, visibilityConstraint.whatViewer()); } // -- IMPLEMENTATIONS diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java index dbf5b053d8a..54a3469e800 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java @@ -29,6 +29,7 @@ import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacetAbstract; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.MmInvokeUtils; import org.apache.causeway.core.metamodel.object.MmVisibilityUtils; @@ -69,7 +70,7 @@ public Object getAssociationValueAsPojo( if(isConfiguredToFilterForVisibility()) { final ManagedObject referencedAdapter = getObjectManager().adapt(referencedObject); final boolean visible = MmVisibilityUtils - .isVisible(referencedAdapter, interactionInitiatedBy); + .isVisible(referencedAdapter, interactionInitiatedBy, WhatViewer.invalid()); if (!visible) return null; } return referencedObject; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/VisibilityConstraint.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/VisibilityConstraint.java index 6562665ef1d..ebda1a73edc 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/VisibilityConstraint.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/VisibilityConstraint.java @@ -32,12 +32,4 @@ public VisibilityConstraint withWhere(final Where where) { return new VisibilityConstraint(whatViewer, where); } - /** - * temporary for refactoring - */ - @Deprecated - public static VisibilityConstraint invalid(final Where where) { - return new VisibilityConstraint(WhatViewer.invalid(), where); - } - } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java index 8470a18115b..1931fb43080 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java @@ -140,7 +140,7 @@ public Railway<InteractionVeto, ManagedObject> invoke( final ManagedObject actionResult = getAction() // under the hood intercepts cases, where the owner is a value-type; // executions on value-types have no rule checking and trigger no domain events - .execute(interactionHead(), actionParameters, interactionInitiatedBy); + .execute(interactionHead(), actionParameters, interactionInitiatedBy, visibilityConstraint().whatViewer()); return Railway.success(route(actionResult)); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java index a92ac88d7a6..7d63f1135d8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java @@ -27,6 +27,7 @@ import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet; import org.apache.causeway.core.metamodel.interactions.InteractionUtils; import org.apache.causeway.core.metamodel.interactions.VisibilityConstraint; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.interactions.vis.ObjectVisibilityContext; import lombok.experimental.UtilityClass; @@ -35,7 +36,7 @@ public final class MmVisibilityUtils { public static Predicate<? super ManagedObject> filterOn(final InteractionInitiatedBy interactionInitiatedBy) { - return $->MmVisibilityUtils.isVisible($, interactionInitiatedBy); + return $->MmVisibilityUtils.isVisible($, interactionInitiatedBy, WhatViewer.invalid()); } /** @@ -88,7 +89,8 @@ public static Object visiblePojosAutofit( */ public static boolean isVisible( final ManagedObject mo, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { if(ManagedObjects.isNullOrUnspecifiedOrEmpty(mo)) // a choices list could include a null (eg example in ToDoItems#choices1Categorized()); want to show as "visible" @@ -104,7 +106,7 @@ public static boolean isVisible( var visibilityContext = ObjectVisibilityContext.createForRegular( mo, InteractionInitiatedBy.USER, - VisibilityConstraint.invalid(Where.OBJECT_FORMS)); + new VisibilityConstraint(whatViewer, Where.OBJECT_FORMS)); return InteractionUtils.isVisibleResult(spec, visibilityContext) .isAllowing(); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/HasObjectAction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/HasObjectAction.java index fe45a269212..d301ce18af7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/HasObjectAction.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/HasObjectAction.java @@ -34,6 +34,7 @@ import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.interactions.InteractionHead; import org.apache.causeway.core.metamodel.interactions.VisibilityConstraint; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ActionScope; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -133,8 +134,8 @@ default FacetHolder getFacetHolder() { return getObjectAction().executeWithRuleChecking(head, parameters, interactionInitiatedBy, visibilityConstraint); } @Override default ManagedObject execute(final InteractionHead head, final Can<ManagedObject> parameters, - final InteractionInitiatedBy interactionInitiatedBy) { - return getObjectAction().execute(head, parameters, interactionInitiatedBy); + final InteractionInitiatedBy interactionInitiatedBy, final WhatViewer whatViewer) { + return getObjectAction().execute(head, parameters, interactionInitiatedBy, whatViewer); } @Override default Consent isArgumentSetValid(final InteractionHead head, final Can<ManagedObject> proposedArguments, final InteractionInitiatedBy interactionInitiatedBy) { 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 985db5cb6e5..cb52e9d0b8c 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 @@ -119,7 +119,8 @@ ManagedObject executeWithRuleChecking( ManagedObject execute( InteractionHead head, Can<ManagedObject> parameters, - InteractionInitiatedBy interactionInitiatedBy); + InteractionInitiatedBy interactionInitiatedBy, + WhatViewer whatViewer); // -- isArgumentSetValid, isArgumentSetValidForParameters, isArgumentSetValidForAction diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java index 3c6dc5b69b6..df4278d9a92 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java @@ -54,6 +54,7 @@ import org.apache.causeway.core.metamodel.interactions.InteractionUtils; import org.apache.causeway.core.metamodel.interactions.RenderPolicy; import org.apache.causeway.core.metamodel.interactions.VisibilityConstraint; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.interactions.use.ActionUsabilityContext; import org.apache.causeway.core.metamodel.interactions.use.UsabilityContext; import org.apache.causeway.core.metamodel.interactions.val.ActionValidityContext; @@ -413,7 +414,7 @@ public final ManagedObject executeWithRuleChecking( if(validity.isVetoed()) throw new RecoverableException(validity.getReasonAsString().orElse("no reason given")); - return execute(head, arguments, interactionInitiatedBy); + return execute(head, arguments, interactionInitiatedBy, visibilityConstraint.whatViewer()); } /** @@ -424,7 +425,8 @@ public final ManagedObject executeWithRuleChecking( public ManagedObject execute( final InteractionHead head, final Can<ManagedObject> argumentAdapters, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { _Assert.assertEquals(this.getParameterCount(), argumentAdapters.size(), "action's parameter count and provided argument count must match"); @@ -446,7 +448,7 @@ public ManagedObject execute( } } - return this.executeInternal(head, argumentAdapters, interactionInitiatedBy); + return this.executeInternal(head, argumentAdapters, interactionInitiatedBy, whatViewer); } /** @@ -455,10 +457,11 @@ public ManagedObject execute( protected ManagedObject executeInternal( final InteractionHead head, final Can<ManagedObject> argumentAdapters, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { var actionInvocationFacet = getFacet(ActionInvocationFacet.class); return actionInvocationFacet - .invoke(this, head, argumentAdapters, interactionInitiatedBy); + .invoke(this, head, argumentAdapters, interactionInitiatedBy, whatViewer); } protected Optional<ActionInvocationFacet> getActionInvocationFacet() { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java index d878bd98e1c..ad20a0a7d4b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java @@ -36,6 +36,7 @@ import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.MixedInAction; @@ -154,7 +155,8 @@ protected ManagedObject mixinAdapterFor(final ManagedObject mixeeAdapter) { public ManagedObject execute( final InteractionHead head, final Can<ManagedObject> argumentAdapters, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { final ManagedObject owner = head.owner(); final ManagedObject target = mixinAdapterFor(mixinSpec, owner); @@ -178,7 +180,8 @@ public ManagedObject execute( return mixinAction.executeInternal( head, argumentAdapters, - interactionInitiatedBy); + interactionInitiatedBy, + whatViewer); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java index 3d1a98f03be..54e0d890f71 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java @@ -34,6 +34,7 @@ import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacetForContributee; import org.apache.causeway.core.metamodel.facets.properties.update.SnapshotExcludeFacetFromImmutableMember; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.services.publishing.ExecutionPublisher; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -131,9 +132,8 @@ protected InteractionHead headFor(final ManagedObject mixedInAdapter) { private DisabledFacet disabledFacet() { final DisabledFacet originalFacet = facetHolder.getFacet(DisabledFacet.class); if( originalFacet != null && - originalFacet.where().isAlways()) { - return originalFacet; - } + originalFacet.where().isAlways()) + return originalFacet; // ensure that the contributed association is always disabled return new DisabledFacetForContributee(VetoReason.mixedinCollection(), this); } @@ -145,7 +145,7 @@ public ManagedObject get( return executionPublisher().withPublishingSuppressed( () -> mixinAction.executeInternal( - headFor(ownerAdapter), Can.empty(), interactionInitiatedBy)); + headFor(ownerAdapter), Can.empty(), interactionInitiatedBy, WhatViewer.invalid())); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java index bd6a030883c..06d7e82527c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java @@ -31,6 +31,7 @@ import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacetForContributee; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.services.publishing.ExecutionPublisher; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -112,9 +113,8 @@ protected InteractionHead headFor(final ManagedObject mixeeAdapter) { private DisabledFacet disabledFacet() { final DisabledFacet originalFacet = facetHolder.getFacet(DisabledFacet.class); if( originalFacet != null && - originalFacet.where().isAlways()) { - return originalFacet; - } + originalFacet.where().isAlways()) + return originalFacet; // ensure that the contributed association is always disabled return new DisabledFacetForContributee(VetoReason.mixedinProperty(), this); } @@ -127,7 +127,7 @@ public ManagedObject get( var head = headFor(mixedInAdapter); return executionPublisher().withPublishingSuppressed( - () -> mixinAction.executeInternal(head, Can.empty(), interactionInitiatedBy) + () -> mixinAction.executeInternal(head, Can.empty(), interactionInitiatedBy, WhatViewer.invalid()) ); } diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java index 7bb3af9c740..a21fa54a1b4 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java @@ -50,6 +50,7 @@ import org.apache.causeway.commons.internal.exceptions._Exceptions; import org.apache.causeway.core.metamodel.commons.UtilStr; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.ManagedObjects; import org.apache.causeway.core.metamodel.services.publishing.CommandPublisher; @@ -149,10 +150,9 @@ private Try<Bookmark> doExecute( Try<Bookmark> result = transactionService.callWithinCurrentTransactionElseCreateNew( () -> { - if (interactionContextPolicy == InteractionContextPolicy.NO_SWITCH) { - // short-circuit + if (interactionContextPolicy == InteractionContextPolicy.NO_SWITCH) + // short-circuit return doExecuteCommand(dto); - } return sudoService.call( context -> interactionContextPolicy.mapper.apply(context, dto), () -> doExecuteCommand(dto)); @@ -199,7 +199,7 @@ private Bookmark doExecuteCommand(final CommandDto dto) { var interactionHead = objectAction.interactionHead(targetAdapter); - var resultAdapter = objectAction.execute(interactionHead, argAdapters, InteractionInitiatedBy.FRAMEWORK); + var resultAdapter = objectAction.execute(interactionHead, argAdapters, InteractionInitiatedBy.FRAMEWORK, WhatViewer.noViewer()); // flush any PersistenceCommands pending // (else might get transient objects for the return value) @@ -213,10 +213,9 @@ private Bookmark doExecuteCommand(final CommandDto dto) { // Object unused = priorExecution.getReturned(); // - if(resultAdapter != null) { - return ManagedObjects.bookmark(resultAdapter) + if(resultAdapter != null) + return ManagedObjects.bookmark(resultAdapter) .orElse(null); - } } else { var propertyDto = (PropertyDto) memberDto; @@ -226,10 +225,9 @@ private Bookmark doExecuteCommand(final CommandDto dto) { var targetAdapter = valueMarshaller.recoverReferenceFrom(targetOidDto); - if(ManagedObjects.isNullOrUnspecifiedOrEmpty(targetAdapter)) { - throw _Exceptions.unrecoverable("cannot recreate ManagedObject from bookmark %s", + if(ManagedObjects.isNullOrUnspecifiedOrEmpty(targetAdapter)) + throw _Exceptions.unrecoverable("cannot recreate ManagedObject from bookmark %s", Bookmark.forOidDto(targetOidDto)); - } var property = findOneToOneAssociation(targetAdapter, logicalMemberIdentifier); var newValueAdapter = valueMarshaller.recoverPropertyFrom(propertyDto); @@ -249,12 +247,9 @@ private String targetBookmarkStrFor(final CommandDto dto) { private String argStrFor(final CommandDto dto) { var memberDto = dto.getMember(); - if(memberDto instanceof ActionDto) { - var actionDto = (ActionDto) memberDto; - return paramNameArgValuesFor(actionDto); - } - if(memberDto instanceof PropertyDto) { - var propertyDto = (PropertyDto) memberDto; + if(memberDto instanceof ActionDto actionDto) + return paramNameArgValuesFor(actionDto); + if(memberDto instanceof PropertyDto propertyDto) { var proposedValue = valueMarshaller.recoverPropertyFrom(propertyDto); return proposedValue.getTitle(); } @@ -274,9 +269,8 @@ private static ObjectAction findObjectAction( var localActionId = localPartOf(logicalMemberIdentifier); var objectAction = findActionElseNull(objectSpecification, localActionId); - if(objectAction == null) { - throw new RuntimeException(String.format("Unknown action '%s'", localActionId)); - } + if(objectAction == null) + throw new RuntimeException(String.format("Unknown action '%s'", localActionId)); return objectAction; } @@ -292,9 +286,8 @@ private static OneToOneAssociation findOneToOneAssociation( var objectSpecification = targetAdapter.objSpec(); var property = findOneToOneAssociationElseNull(objectSpecification, localPropertyId); - if(property == null) { - throw new RuntimeException(String.format("Unknown property '%s'", localPropertyId)); - } + if(property == null) + throw new RuntimeException(String.format("Unknown property '%s'", localPropertyId)); return property; } diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java index 427700ec4b4..4589ff3604a 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java @@ -57,6 +57,7 @@ import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet; import org.apache.causeway.core.metamodel.interactions.InteractionHead; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.ManagedObjects; import org.apache.causeway.core.metamodel.object.MmEntityUtils; @@ -216,7 +217,7 @@ private ManagedObject invokeActionInternally( executionPublisher().publishActionInvocation(priorExecution); } - var result = resultFilteredHonoringVisibility(returnedAdapter, interactionInitiatedBy); + var result = resultFilteredHonoringVisibility(returnedAdapter, interactionInitiatedBy, actionExecutor.whatViewer()); _Xray.exitInvocation(xrayHandle); return result; } @@ -334,7 +335,8 @@ private void setCommandResultIfEntity( private ManagedObject resultFilteredHonoringVisibility( final ManagedObject resultAdapter, - final InteractionInitiatedBy interactionInitiatedBy) { + final InteractionInitiatedBy interactionInitiatedBy, + final WhatViewer whatViewer) { if(ManagedObjects.isNullOrUnspecifiedOrEmpty(resultAdapter)) return resultAdapter; @@ -343,7 +345,7 @@ private ManagedObject resultFilteredHonoringVisibility( || resultAdapter instanceof PackedManagedObject) return resultAdapter; - return MmVisibilityUtils.isVisible(resultAdapter, interactionInitiatedBy) + return MmVisibilityUtils.isVisible(resultAdapter, interactionInitiatedBy, whatViewer) ? resultAdapter : null; } diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java index fad1f3d6ee8..d410811c297 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java @@ -394,7 +394,7 @@ private Object handleActionMethod( .forAction(head, objectAction, argAdapters)); return runExecutionTask(wrapperInvocation, ()->{ - var returnedAdapter = objectAction.execute(head, argAdapters, iConstraint.initiatedBy()); + var returnedAdapter = objectAction.execute(head, argAdapters, iConstraint.initiatedBy(), iConstraint.whatViewer()); return MmUnwrapUtils.single(returnedAdapter); }, ()->new ExceptionLogger("action " + objectAction.getId(), targetAdapter)); } diff --git a/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java b/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java index d51c5598bee..6599fa1725a 100644 --- a/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java +++ b/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java @@ -93,7 +93,7 @@ public void actionInteraction( var command = interactionService.currentInteractionElseFail().getCommand(); var actInteraction = ActionInteraction - .wrap(ManagedAction.of(ManagedObject.adaptSingular(objSpec, domainObject), act, VisibilityConstraint.invalid(Where.OBJECT_FORMS))); + .wrap(ManagedAction.of(ManagedObject.adaptSingular(objSpec, domainObject), act, VisibilityConstraint.noViewer(Where.OBJECT_FORMS))); var params = actInteraction.startParameterNegotiation().orElseThrow(); var singleArgPojoToUse = actionArgumentProvider.get(); @@ -113,7 +113,7 @@ public void actionInteraction( var command = interactionService.currentInteractionElseFail().getCommand(); var actInteraction = ActionInteraction - .wrap(ManagedAction.of(ManagedObject.adaptSingular(objSpec, domainObject), act, VisibilityConstraint.invalid(Where.OBJECT_FORMS))); + .wrap(ManagedAction.of(ManagedObject.adaptSingular(objSpec, domainObject), act, VisibilityConstraint.noViewer(Where.OBJECT_FORMS))); var params = actInteraction.startParameterNegotiation().orElseThrow(); @@ -201,7 +201,7 @@ public void propertyInteraction( var command = interactionService.currentInteractionElseFail().getCommand(); var propInteraction = PropertyInteraction - .wrap(ManagedProperty.of(ManagedObject.adaptSingular(objSpec, domainObject), prop, VisibilityConstraint.invalid(Where.OBJECT_FORMS))); + .wrap(ManagedProperty.of(ManagedObject.adaptSingular(objSpec, domainObject), prop, VisibilityConstraint.noViewer(Where.OBJECT_FORMS))); propInteraction.modifyProperty(managedProp-> ManagedObject.adaptSingular(managedProp.getElementType(), newProperyValueProvider.apply(managedProp))); diff --git a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/object/UiObject.java b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/object/UiObject.java index 1533c42c609..fd091ac9f24 100644 --- a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/object/UiObject.java +++ b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/object/UiObject.java @@ -19,6 +19,7 @@ package org.apache.causeway.viewer.commons.model.object; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; +import org.apache.causeway.core.metamodel.interactions.WhatViewer; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.MmVisibilityUtils; import org.apache.causeway.viewer.commons.model.UiModel; @@ -27,9 +28,9 @@ public interface UiObject extends UiModel { ManagedObject getManagedObject(); - default boolean isVisible() { + default boolean isVisible(final WhatViewer whatViewer) { return MmVisibilityUtils - .isVisible(getManagedObject(), InteractionInitiatedBy.USER); + .isVisible(getManagedObject(), InteractionInitiatedBy.USER, whatViewer); } } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/RichMutationForAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/RichMutationForAction.java index 02e6387fc5c..5b2c2909190 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/RichMutationForAction.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/RichMutationForAction.java @@ -183,7 +183,7 @@ protected Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment if (validityConsent.isVetoed()) throw new IllegalArgumentException(validityConsent.getReasonAsString().orElse("Invalid")); - var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER); + var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER, visibilityConstraint.whatViewer()); return resultManagedObject.getPojo(); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/RichActionInvokeResult.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/RichActionInvokeResult.java index 527d8ab8328..7dcd831e99c 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/RichActionInvokeResult.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/RichActionInvokeResult.java @@ -127,7 +127,7 @@ protected Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment if (validityConsent.isVetoed()) throw new IllegalArgumentException(validityConsent.getReasonAsString().orElse("Invalid")); - var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER); + var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER, visibilityConstraint.whatViewer()); return resultManagedObject.getPojo(); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/mutation/SimpleMutationForAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/mutation/SimpleMutationForAction.java index 0886c3ea46f..608c7997cfc 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/mutation/SimpleMutationForAction.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/mutation/SimpleMutationForAction.java @@ -182,7 +182,7 @@ protected Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment if (validityConsent.isVetoed()) throw new IllegalArgumentException(validityConsent.getReasonAsString().orElse("Invalid")); - var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER); + var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER, visibilityConstraint.whatViewer()); return resultManagedObject.getPojo(); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/SimpleAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/SimpleAction.java index 7b185341783..1b49b4f318b 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/SimpleAction.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/SimpleAction.java @@ -315,7 +315,7 @@ protected Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment if (validityConsent.isVetoed()) throw new IllegalArgumentException(validityConsent.getReasonAsString().orElse("Invalid")); - var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER); + var resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER, visibilityConstraint.whatViewer()); return resultManagedObject.getPojo(); } diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/obj/DomainObjectPage.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/obj/DomainObjectPage.java index c64c154addf..20193db03cd 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/obj/DomainObjectPage.java +++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/obj/DomainObjectPage.java @@ -45,6 +45,7 @@ import org.apache.causeway.viewer.commons.model.components.UiComponentType; import org.apache.causeway.viewer.wicket.model.hints.UiHintContainer; import org.apache.causeway.viewer.wicket.model.models.UiObjectWkt; +import org.apache.causeway.viewer.wicket.model.models.interaction.WktVisibility; import org.apache.causeway.viewer.wicket.model.util.PageParameterUtils; import org.apache.causeway.viewer.wicket.model.util.PageUtils; import org.apache.causeway.viewer.wicket.model.whereAmI.WhereAmI; @@ -85,9 +86,8 @@ public class DomainObjectPage extends PageAbstract { */ public static DomainObjectPage forPageParameters(final PageParameters pageParameters) { var bookmark = PageParameterUtils.toBookmark(pageParameters); - if(!bookmark.isPresent()) { - throw new RestartResponseException(Application.get().getHomePage()); - } + if(!bookmark.isPresent()) + throw new RestartResponseException(Application.get().getHomePage()); return new DomainObjectPage( pageParameters, UiObjectWkt.ofPageParameters(pageParameters)); @@ -143,9 +143,8 @@ private void buildPage() { } // check that the entity overall can be viewed. - if(!model.isVisible()) { - throw new ObjectMember.AuthorizationException(); - } + if(!model.isVisible(WktVisibility.WHAT_VIEWER)) + throw new ObjectMember.AuthorizationException(); var objectSpec = model.getTypeOfSpecification(); @@ -209,7 +208,7 @@ protected void onDetach() { super.onDetach(); model.detach(); } - + // -- REFRESH ENTITIES @Override @@ -217,7 +216,7 @@ public void onNewRequestCycle() { var mo = model.getObject(); if(!PageUtils.isAjax()) { //CAUSEWAY-3944: on normal page request, make sure entities are in sync with the db before rendering - ManagedObjects.refreshEntity(mo); + ManagedObjects.refreshEntity(mo); } ManagedObjects.refreshViewmodel(mo, ()->PageParameterUtils @@ -245,9 +244,8 @@ private void onRenderingOrRendered( final Can<PageRenderSubscriber> pageRenderSubscribers, final BiFunction<PageRenderSubscriber, Bookmark, Void> handler) { - if(pageRenderSubscribers.isEmpty()) { - return; - } + if(pageRenderSubscribers.isEmpty()) + return; // guard against unspecified ManagedObjects.asSpecified(model.getObject())
