diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/appfeat/ApplicationFeatureFilter.java b/api/applib/src/main/java/org/apache/causeway/applib/services/appfeat/ApplicationFeatureFilter.java
new file mode 100644
index 00000000000..9aa952af2d1
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/appfeat/ApplicationFeatureFilter.java
@@ -0,0 +1,41 @@
+/*
+ * 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.applib.services.appfeat;
+
+/**
+ * The various viewer implementations will individually honor any filters registered with Spring,
+ * based on a matching qualifier ('Graphql', 'Restful', etc.).
+ *
+ *
All filters that match a qualifier are consulted until any one rejects the {@link ApplicationFeature}.
+ *
+ *
If no filters match a qualifier, any {@link ApplicationFeature} is accepted.
+ *
+ *
'NoViewer' is a reserved string internally used to mean 'no filtering', hence it should not be used to qualify a filter.
+ *
+ * @since 4.0 {@index}
+ */
+@FunctionalInterface
+public interface ApplicationFeatureFilter {
+
+ /**
+ * Whether to include given {@link ApplicationFeature}.
+ */
+ boolean filter(ApplicationFeature feature);
+
+}
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/wrapper/control/SyncControl.java b/api/applib/src/main/java/org/apache/causeway/applib/services/wrapper/control/SyncControl.java
index cb2896057fa..7dc3d5edcd6 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/wrapper/control/SyncControl.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/wrapper/control/SyncControl.java
@@ -20,8 +20,9 @@
import java.util.UUID;
-import org.jspecify.annotations.Nullable;
+import org.springframework.util.StringUtils;
+import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.iactnlayer.InteractionContext;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.schema.cmd.v2.CommandDto;
@@ -50,7 +51,12 @@ public record SyncControl(
*
*
The default behaviour is to rethrow the exception.
*/
- ExceptionHandler exceptionHandler) {
+ ExceptionHandler exceptionHandler,
+ /**
+ * Simulated viewerId, honoring feature filtering.
+ */
+ String viewerId,
+ Where where) {
//TODO can this be further simplified, or is there already an API we can reuse?
@@ -79,22 +85,22 @@ public void onCommand(
}
public static SyncControl defaults() {
- return new SyncControl(false, false, null, null);
+ return new SyncControl(false, false, null, null, null, null);
}
- public SyncControl(
- boolean isSkipRules,
- boolean isSkipExecute,
- @Nullable Can commandListeners,
- @Nullable ExceptionHandler exceptionHandler) {
- this.isSkipRules = isSkipRules;
- this.isSkipExecute = isSkipExecute;
- this.commandListeners = commandListeners!=null
- ? commandListeners
- : Can.empty();
- this.exceptionHandler = exceptionHandler!=null
- ? exceptionHandler
- : exception -> { throw exception; };
+ public SyncControl {
+ commandListeners = commandListeners!=null
+ ? commandListeners
+ : Can.empty();
+ exceptionHandler = exceptionHandler!=null
+ ? exceptionHandler
+ : exception -> { throw exception; };
+ viewerId = StringUtils.hasText(viewerId)
+ ? viewerId
+ : "NoViewer";
+ where = where!=null
+ ? where
+ : Where.ANYWHERE;
}
/**
@@ -102,27 +108,27 @@ public SyncControl(
* executing the underlying property or action
*/
public SyncControl withSkipRules() {
- return new SyncControl(true, isSkipExecute, commandListeners, exceptionHandler);
+ return new SyncControl(true, isSkipExecute, commandListeners, exceptionHandler, viewerId, where);
}
public SyncControl withCheckRules() {
- return new SyncControl(false, isSkipExecute, commandListeners, exceptionHandler);
+ return new SyncControl(false, isSkipExecute, commandListeners, exceptionHandler, viewerId, where);
}
/**
* Explicitly set the action to be executed.
*/
public SyncControl withExecute() {
- return new SyncControl(isSkipRules, false, commandListeners, exceptionHandler);
+ return new SyncControl(isSkipRules, false, commandListeners, exceptionHandler, viewerId, where);
}
/**
* Explicitly set the action to not be executed, in other words a 'dry run'.
*/
public SyncControl withNoExecute() {
- return new SyncControl(isSkipRules, true, commandListeners, exceptionHandler);
+ return new SyncControl(isSkipRules, true, commandListeners, exceptionHandler, viewerId, where);
}
- public SyncControl listen(@NonNull CommandListener commandListener) {
- return new SyncControl(isSkipRules, isSkipExecute, commandListeners.add(commandListener), exceptionHandler);
+ public SyncControl listen(@NonNull final CommandListener commandListener) {
+ return new SyncControl(isSkipRules, isSkipExecute, commandListeners.add(commandListener), exceptionHandler, viewerId, where);
}
/**
@@ -131,13 +137,21 @@ public SyncControl listen(@NonNull CommandListener commandListener) {
* The default behaviour is to rethrow the exception.
*/
public SyncControl withExceptionHandler(final @NonNull ExceptionHandler exceptionHandler) {
- return new SyncControl(isSkipRules, isSkipExecute, commandListeners, exceptionHandler);
+ return new SyncControl(isSkipRules, isSkipExecute, commandListeners, exceptionHandler, viewerId, where);
+ }
+
+ public SyncControl withViewerId(final String viewerId) {
+ return new SyncControl(isSkipRules, isSkipExecute, commandListeners, exceptionHandler, viewerId, where);
+ }
+
+ public SyncControl withWhere(final Where where) {
+ return new SyncControl(isSkipRules, isSkipExecute, commandListeners, exceptionHandler, viewerId, where);
}
/**
* @return whether this and other share the same execution mode, ignoring exceptionHandling
*/
- public boolean isEquivalent(SyncControl other) {
+ public boolean isEquivalent(final SyncControl other) {
return this.isSkipExecute == other.isSkipExecute
&& this.isSkipRules == other.isSkipRules;
}
diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/SpringContextHolder.java b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/SpringContextHolder.java
index edae73de62a..d1c14fa31e3 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/SpringContextHolder.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/SpringContextHolder.java
@@ -105,7 +105,6 @@ public Optional get(final @NonNull Class requiredType) {
* @see #select(Class, Annotation[])
* @see #getSingletonElseFail(Class)
*/
- @SuppressWarnings("javadoc")
public Can select(final @NonNull Class requiredType) {
var allMatchingBeans = springContext.getBeanProvider(requiredType)
.orderedStream()
@@ -128,7 +127,6 @@ public Can select(final @NonNull Class requiredType) {
*
* @see #select(Class)
*/
- @SuppressWarnings("javadoc")
public Can select(
final @NonNull Class requiredType,
final @Nullable Annotation[] qualifiers) {
@@ -165,7 +163,6 @@ public Can select(
* @return IoC managed singleton
* @throws NoSuchElementException - if the singleton is not resolvable
*/
- @SuppressWarnings("javadoc")
public T getSingletonElseFail(final @NonNull Class type) {
var candidates = select(type);
if (candidates.getCardinality() == Cardinality.ZERO) {
diff --git a/commons/src/main/java/org/apache/causeway/commons/io/JaxbUtils.java b/commons/src/main/java/org/apache/causeway/commons/io/JaxbUtils.java
index f8726d3f1d0..ce6c8310f48 100644
--- a/commons/src/main/java/org/apache/causeway/commons/io/JaxbUtils.java
+++ b/commons/src/main/java/org/apache/causeway/commons/io/JaxbUtils.java
@@ -24,7 +24,6 @@
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Collections;
-import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
diff --git a/commons/src/test/java/org/apache/causeway/commons/net/DataUriTest.java b/commons/src/test/java/org/apache/causeway/commons/net/DataUriTest.java
index 3fd6f9b17ef..4bfba4e4eec 100644
--- a/commons/src/test/java/org/apache/causeway/commons/net/DataUriTest.java
+++ b/commons/src/test/java/org/apache/causeway/commons/net/DataUriTest.java
@@ -27,8 +27,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.apache.causeway.commons.net.DataUri;
-
import lombok.RequiredArgsConstructor;
class DataUriTest {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/Consent.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/Consent.java
index fbb95181e90..4ffab01eca3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/Consent.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/Consent.java
@@ -187,8 +187,8 @@ public static VetoReason delegatedTo(final @NonNull Class extends ImmutableFac
/**
* Optionally the {@link VetoReason}, why consent is being vetoed, based on whether not allowed.
- *
- * Will correspond to the {@link InteractionResult#getReason() reason} in
+ *
+ *
Will correspond to the {@link InteractionResult#getReason() reason} in
* the contained {@link #getInteractionResult() InteractionResult} (if one
* was specified).
*/
@@ -204,8 +204,7 @@ default Optional getReasonAsString() {
/**
* Description of the interaction that this consent represents.
*
- *
- * May be null.
+ *
May be null.
*/
String getDescription();
@@ -222,7 +221,6 @@ default Optional getReasonAsString() {
* The {@link InteractionResult} that created this {@link Consent}.
*
* @return - may be null if created as a legacy {@link Consent}.
- *
*/
public InteractionResult getInteractionResult();
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/InteractionAdvisor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/InteractionAdvisor.java
index 875c2634771..f5ddfdf5826 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/InteractionAdvisor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/consent/InteractionAdvisor.java
@@ -18,13 +18,7 @@
*/
package org.apache.causeway.core.metamodel.consent;
-import java.util.function.BiConsumer;
-
import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.interactions.InteractionAdvisorFacet;
-
-import org.jspecify.annotations.NonNull;
/**
* Marker interface for implementations (specifically, {@link Facet}s) that can
@@ -34,37 +28,4 @@
*/
public interface InteractionAdvisor {
- /**
- * For testing purposes only.
- */
- public static InteractionAdvisor forTesting() {
- return new InteractionAdvisorFacet() {
-
- @Override
- public boolean semanticEquals(final @NonNull Facet other) {
- return this == other;
- }
-
- @Override
- public void visitAttributes(final BiConsumer visitor) {
- }
-
- @Override
- public Class extends Facet> facetType() {
- return null;
- }
-
- @Override
- public FacetHolder facetHolder() {
- return null;
- }
-
- @Override
- public Precedence precedence() {
- return Facet.Precedence.FALLBACK;
- }
-
- };
- }
-
}
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 6c21e2243af..c8363fc6bbf 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
@@ -81,7 +81,7 @@ public static ActionExecutor forAction(
throw _Exceptions.illegalArgument("arguments must be specified for action %s", owningAction);
}});
- var method = actionInvocationFacetAbstract.getMethods().getFirstElseFail();
+ var method = actionInvocationFacetAbstract.methods().getFirstElseFail();
return new ActionExecutor(
owningAction.getMetaModelContext(), facetHolder,
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java
index fd6af2ddcef..02823c588e0 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java
@@ -34,9 +34,9 @@
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.commons.internal.collections._Lists;
import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence;
-import org.apache.causeway.core.metamodel.facetapi.FacetWithAttributes.DisablingOrEnabling;
-import org.apache.causeway.core.metamodel.facetapi.FacetWithAttributes.HidingOrShowing;
-import org.apache.causeway.core.metamodel.facetapi.FacetWithAttributes.Validating;
+import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor;
+import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
+import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor;
import org.apache.causeway.core.metamodel.util.snapshot.XmlSchema;
import lombok.experimental.UtilityClass;
@@ -245,9 +245,17 @@ public static void visitAttributes(Facet facet, BiConsumer visit
}
private String interactionAdvisors(Facet facet, final String delimiter) {
- return Stream.of(Validating.class, HidingOrShowing.class, DisablingOrEnabling.class)
+ return Stream.of(
+ ValidatingInteractionAdvisor.class,
+ HidingInteractionAdvisor.class,
+ DisablingInteractionAdvisor.class)
.filter(marker->marker.isAssignableFrom(facet.getClass()))
- .map(Class::getSimpleName)
+ .map(cls->switch(cls.getSimpleName().substring(0, 1)) {
+ case "V" -> "Validating";
+ case "H" -> "HidingOrShowing";
+ case "D" -> "DisablingOrEnabling";
+ default -> "?";
+ })
.collect(Collectors.joining(delimiter));
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetWithAttributes.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetWithAttributes.java
index 8b407ca2349..de713a767f6 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetWithAttributes.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetWithAttributes.java
@@ -31,22 +31,5 @@ public interface FacetWithAttributes {
default void visitAttributes(final BiConsumer visitor) {
FacetUtil.visitAttributes((Facet)this, visitor);
}
-
- /**
- * Marker interface used within {@link FacetUtil#visitAttributes()}.
- */
- public static interface HidingOrShowing {
- }
-
- /**
- * Marker interface used within {@link FacetUtil#visitAttributes()}.
- */
- public static interface DisablingOrEnabling {
- }
- /**
- * Marker interface used within {@link FacetUtil#visitAttributes()}.
- */
- public static interface Validating {
- }
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java
index e7c034df9a6..0862b038959 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java
@@ -24,16 +24,16 @@
public interface HasImperativeAspect
extends ImperativeFacet {
- ImperativeAspect getImperativeAspect();
+ ImperativeAspect imperativeAspect();
@Override
- default Can getMethods() {
- return getImperativeAspect().methods();
+ default Can methods() {
+ return imperativeAspect().methods();
}
@Override
- default Intent getIntent() {
- return getImperativeAspect().intent();
+ default Intent intent() {
+ return imperativeAspect().intent();
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeFacet.java
index fbcbfaef4a1..3ee47dafb4d 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeFacet.java
@@ -56,7 +56,7 @@ public interface ImperativeFacet extends Facet {
/**
* The {@link Method}s invoked by this {@link Facet}.
*/
- public Can getMethods();
+ Can methods();
public static enum Intent {
CHECK_IF_HIDDEN,
@@ -79,17 +79,17 @@ public static enum Intent {
/**
* The intent of this method, so that the {@link WrapperFactory} knows whether to delegate on or to reject.
*/
- public Intent getIntent();
+ Intent intent();
public static void visitAttributes(final ImperativeFacet imperativeFacet, final BiConsumer visitor) {
- var methods = imperativeFacet.getMethods();
+ var methods = imperativeFacet.methods();
visitor.accept("methods",
methods.stream()
.map(MethodFacade::toString)
.collect(Collectors.joining(", ")));
methods.forEach(method->
visitor.accept(
- "intent." + method.getName(), imperativeFacet.getIntent()));
+ "intent." + method.getName(), imperativeFacet.intent()));
}
// -- UTILITIES
@@ -103,11 +103,11 @@ public static Intent getIntent(final ObjectMember member, final ResolvedMethod m
case 0:
break;
case 1:
- return imperativeFacets.get(0).getIntent();
+ return imperativeFacets.get(0).intent();
default:
Intent intentToReturn = null;
for (ImperativeFacet imperativeFacet : imperativeFacets) {
- Intent intent = imperativeFacet.getIntent();
+ Intent intent = imperativeFacet.intent();
if(intentToReturn == null) {
intentToReturn = intent;
} else if(intentToReturn != intent) {
@@ -143,7 +143,7 @@ public static Can singleRegularMethod(final @NonNull ResolvedMetho
// -- HELPER
private boolean containsMethod(final ResolvedMethod method) {
- return getMethods().stream()
+ return methods().stream()
.map(MethodFacade::asMethodForIntrospection)
.anyMatch(method::equals);
}
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 14d86e5e7d9..2b43c9ae2f4 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
@@ -35,7 +35,7 @@
import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet;
import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction;
import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForMixedInPropertyOrCollection;
-import org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation;
+import org.apache.causeway.core.metamodel.facets.actions.action.prototype.HiddenFacetForDeploymentTypeViaActionAnnotation;
import org.apache.causeway.core.metamodel.facets.actions.action.typeof.TypeOfFacetForActionAnnotation;
import org.apache.causeway.core.metamodel.facets.actions.fileaccept.FileAcceptFacetForActionAnnotation;
import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
@@ -145,10 +145,10 @@ void processRestrictTo(final ProcessMethodContext processMethodContext, final Op
// search for @Action(restrictTo=...)
addFacetIfPresent(
- PrototypeFacetForActionAnnotation
+ HiddenFacetForDeploymentTypeViaActionAnnotation
.create(
actionIfAny, facetedMethod,
- ()->super.getSystemEnvironment().deploymentType()));
+ super.getSystemEnvironment().deploymentType()));
}
void processSemantics(final ProcessMethodContext processMethodContext, final Optional actionIfAny) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java
index ebe4a5d6930..00a5f69b9d3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.events.domain.ActionDomainEvent;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -32,7 +34,7 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public abstract class ActionInvocationFacetAbstract
extends DomainEventFacetAbstract>
@@ -46,7 +48,8 @@ private static final Class extends Facet> type() {
// -- CONSTRUCTION
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
@Getter(onMethod_ = {@Override}) private final ObjectSpecification declaringType;
@Getter(onMethod_ = {@Override}) private final ObjectSpecification returnType;
@@ -67,7 +70,7 @@ protected ActionInvocationFacetAbstract(
}
@Override
- public final Intent getIntent() {
+ public final Intent intent() {
return Intent.EXECUTE;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/prototype/PrototypeFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/prototype/HiddenFacetForDeploymentTypeViaActionAnnotation.java
similarity index 51%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/prototype/PrototypeFacetForActionAnnotation.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/prototype/HiddenFacetForDeploymentTypeViaActionAnnotation.java
index ff3f1ef9dd6..45a3edca345 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/prototype/PrototypeFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/prototype/HiddenFacetForDeploymentTypeViaActionAnnotation.java
@@ -19,31 +19,46 @@
package org.apache.causeway.core.metamodel.facets.actions.action.prototype;
import java.util.Optional;
-import java.util.function.Supplier;
+import java.util.function.BiConsumer;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.RestrictTo;
import org.apache.causeway.core.config.environment.DeploymentType;
+import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.actions.prototype.HiddenFacetForDeploymentType;
+import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
-public class PrototypeFacetForActionAnnotation
-extends PrototypeFacetAbstract {
+public record HiddenFacetForDeploymentTypeViaActionAnnotation(
+ DeploymentType deploymentType,
+ FacetHolder facetHolder
+ ) implements HiddenFacetForDeploymentType {
- public static Optional create(
+ public static Optional create(
final Optional actionsIfAny,
final FacetHolder holder,
- final Supplier lazyDeploymentType) {
+ final DeploymentType deploymentType) {
return actionsIfAny
- .map(Action::restrictTo)
- .filter(restrictTo -> restrictTo == RestrictTo.PROTOTYPING)
- .map(restrictTo -> new PrototypeFacetForActionAnnotation(holder, lazyDeploymentType.get()));
-
+ .map(Action::restrictTo)
+ .filter(restrictTo -> restrictTo == RestrictTo.PROTOTYPING)
+ .map(restrictTo -> new HiddenFacetForDeploymentTypeViaActionAnnotation(deploymentType, holder));
}
- private PrototypeFacetForActionAnnotation(final FacetHolder holder, final DeploymentType deploymentType) {
- super(holder, deploymentType);
- }
+ @Override public Class extends Facet> facetType() { return HiddenFacetForDeploymentType.class; }
+ @Override public Precedence precedence() { return Precedence.DEFAULT; }
+ @Override
+ public String hides(VisibilityContext ic) {
+ return deploymentType.isProduction()
+ ? "Prototyping action not visible in production mode"
+ : null;
+ }
+
+ @Override
+ public void visitAttributes(final BiConsumer visitor) {
+ HiddenFacetForDeploymentType.super.visitAttributes(visitor);
+ visitor.accept("deploymentType", deploymentType.name());
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutAnnotation.java
index 4d1a7ccd099..51b78fde56e 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutAnnotation.java
@@ -23,10 +23,10 @@
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetForLayoutAbstract;
import org.apache.causeway.core.metamodel.object.ManagedObject;
-public class HiddenFacetForActionLayoutAnnotation extends HiddenFacetAbstract {
+public class HiddenFacetForActionLayoutAnnotation extends HiddenFacetForLayoutAbstract {
public static Optional create(
final Optional actionLayoutIfAny,
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
index 39ab3bf49e5..69746f843d6 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
@@ -23,14 +23,14 @@
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.layout.component.ActionLayoutData;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
+import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetForLayoutAbstract;
import org.apache.causeway.core.metamodel.object.ManagedObject;
public class HiddenFacetForActionLayoutXml
-extends HiddenFacetAbstract {
+extends HiddenFacetForLayoutAbstract {
- public static Optional create(
+ public static Optional create(
final ActionLayoutData actionLayout,
final FacetHolder holder,
final Precedence precedence) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/HiddenFacetForDeploymentType.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacet.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/HiddenFacetForDeploymentType.java
index cab8fd3ba3a..27c0b77a281 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/HiddenFacetForDeploymentType.java
@@ -18,12 +18,11 @@
*/
package org.apache.causeway.core.metamodel.facets.actions.prototype;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
/**
* Indicates that the action should only be available in prototype mode.
*/
-public interface PrototypeFacet extends Facet, HidingInteractionAdvisor {
+public interface HiddenFacetForDeploymentType extends HidingInteractionAdvisor {
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
deleted file mode 100644
index 102fd5c4b03..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
+++ /dev/null
@@ -1,57 +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.actions.prototype;
-
-import java.util.function.BiConsumer;
-
-import org.apache.causeway.core.config.environment.DeploymentType;
-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.interactions.vis.VisibilityContext;
-
-public abstract class PrototypeFacetAbstract
-extends FacetAbstract
-implements PrototypeFacet {
-
- private final DeploymentType deploymentType;
-
- private static final Class extends Facet> type() {
- return PrototypeFacet.class;
- }
-
- public PrototypeFacetAbstract(final FacetHolder holder, final DeploymentType deploymentType) {
- super(type(), holder);
- this.deploymentType = deploymentType;
- }
-
- @Override
- public String hides(
- final VisibilityContext ic) {
- return deploymentType.isProduction()
- ? "Prototyping action not visible in production mode"
- : null;
- }
-
- @Override
- public void visitAttributes(final BiConsumer visitor) {
- super.visitAttributes(visitor);
- visitor.accept("deploymentType", deploymentType.name());
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionParameterValidationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionParameterValidationFacetViaMethod.java
index d19a8e813e7..9f6fdc96fcd 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionParameterValidationFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionParameterValidationFacetViaMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.i18n.TranslatableString;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.applib.services.i18n.TranslationService;
@@ -33,13 +35,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class ActionParameterValidationFacetViaMethod
extends ActionParameterValidationFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final TranslationService translationService;
private final TranslationContext translationContext;
@@ -55,7 +58,7 @@ public ActionParameterValidationFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHECK_IF_VALID;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java
index d9a669f40ca..b5cf3c70b41 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.i18n.TranslatableString;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.commons.collections.Can;
@@ -34,13 +36,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class ActionValidationFacetViaMethod
extends ActionValidationFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final TranslationContext translationContext;
private final Optional patConstructor;
@@ -56,7 +59,7 @@ public ActionValidationFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHECK_IF_VALID;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/ApplicationFeatureFilters.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/ApplicationFeatureFilters.java
new file mode 100644
index 00000000000..447c7edb6e8
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/ApplicationFeatureFilters.java
@@ -0,0 +1,91 @@
+/*
+ * 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.all.hide;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import org.jspecify.annotations.Nullable;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.util.StringUtils;
+
+import org.apache.causeway.applib.services.appfeat.ApplicationFeatureFilter;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.base._NullSafe;
+import org.apache.causeway.commons.internal.collections._Multimaps;
+
+record ApplicationFeatureFilters(
+ Can unqualifiedFilters,
+ Map> filtersByQualifier) {
+
+ // -- FACTORIES
+
+ static ApplicationFeatureFilters empty() {
+ return new ApplicationFeatureFilters(Can.empty(), Collections.emptyMap());
+ }
+
+ static ApplicationFeatureFilters collectFrom(final @Nullable ApplicationContext springContext) {
+ if(springContext==null)
+ //JUnit Support
+ return ApplicationFeatureFilters.empty();
+
+ var unqualifiedFilters = new ArrayList();
+ var filtersByQualifier = _Multimaps.newListMultimap();
+
+ Stream.of(springContext.getBeanNamesForType(ApplicationFeatureFilter.class))
+ .forEach(beanName->{
+ var filterBean = springContext.getBean(beanName, ApplicationFeatureFilter.class);
+ @SuppressWarnings("deprecation")
+ Set qualifiers = AnnotationUtils.getRepeatableAnnotations(filterBean.getClass(), Qualifier.class);
+ if(!_NullSafe.isEmpty(qualifiers)) {
+ qualifiers.forEach(qualifier->{
+ if(StringUtils.hasText(qualifier.value())) {
+ filtersByQualifier.putElement(qualifier.value(), filterBean);
+ } else {
+ unqualifiedFilters.add(filterBean);
+ }
+ });
+ } else {
+ unqualifiedFilters.add(filterBean);
+ }
+ });
+
+ // Sanitize (no duplicates, when already in unqualified Can) and make immutable
+ var unqualifiedFiltersCanned = Can.ofCollection(unqualifiedFilters).distinct();
+ var filtersByQualifierCanned = new HashMap>();
+ filtersByQualifier.forEach((k, v)->filtersByQualifierCanned.put(k, Can.ofCollection(v).distinct().filter(it->!unqualifiedFiltersCanned.contains(it))));
+ return new ApplicationFeatureFilters(
+ unqualifiedFiltersCanned,
+ Collections.unmodifiableMap(filtersByQualifierCanned));
+ }
+
+ // --
+
+// boolean filter(ApplicationFeature feature) {
+//
+// }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilter.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilter.java
new file mode 100644
index 00000000000..97ec99873cc
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilter.java
@@ -0,0 +1,30 @@
+/*
+ * 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.all.hide;
+
+import org.apache.causeway.applib.services.appfeat.ApplicationFeatureFilter;
+import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
+
+/**
+ * Optionally hides a feature via {@link ApplicationFeatureFilter}.
+ */
+public interface HiddenFacetForFeatureFilter
+extends HidingInteractionAdvisor {
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilterFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilterFactory.java
new file mode 100644
index 00000000000..4521b0da5b7
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilterFactory.java
@@ -0,0 +1,62 @@
+/*
+ * 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.all.hide;
+
+import java.util.Optional;
+
+import jakarta.inject.Inject;
+
+import org.apache.causeway.commons.internal.ioc.SpringContextHolder;
+import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.facetapi.FeatureType;
+import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+
+/**
+ * Installs the {@link HiddenFacetForFeatureFilterImpl} on the
+ * {@link ObjectSpecification}.
+ */
+public class HiddenFacetForFeatureFilterFactory
+extends FacetFactoryAbstract {
+
+ private final ApplicationFeatureFilters applicationFeatureFilters;
+
+ @Inject
+ public HiddenFacetForFeatureFilterFactory(final MetaModelContext mmc) {
+ super(mmc, FeatureType.EVERYTHING_BUT_PARAMETERS);
+ var springContext = Optional.ofNullable(mmc.getSystemEnvironment().springContextHolder())
+ .map(SpringContextHolder::springContext)
+ .orElse(null);
+ this.applicationFeatureFilters = ApplicationFeatureFilters.collectFrom(springContext);
+ }
+
+ @Override
+ public void process(final ProcessClassContext processClassContext) {
+ var facetHolder = processClassContext.getFacetHolder();
+ //TODO WIP FacetUtil.addFacet(new HiddenFacetForFeatureFilterImpl(facetHolder));
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+ var facetHolder = processMethodContext.getFacetHolder();
+ //TODO WIP processMethodContext.getFeatureType().isProperty();
+ //TODO WIP FacetUtil.addFacet(new HiddenFacetForFeatureFilterImpl(facetHolder));
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetNone.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilterImpl.java
similarity index 67%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetNone.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilterImpl.java
index b151fe944c6..aebbc38fb67 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForFeatureFilterImpl.java
@@ -16,24 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.core.metamodel.facets.members.hidden.method;
+package org.apache.causeway.core.metamodel.facets.all.hide;
+import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
-public class HideForContextFacetNone
-extends HideForContextFacetAbstract {
-
- public HideForContextFacetNone(final FacetHolder holder) {
- super(holder, Precedence.FALLBACK);
- }
-
- /**
- * Always returns null.
- */
+public record HiddenFacetForFeatureFilterImpl(
+ FacetHolder facetHolder
+ ) implements HiddenFacetForFeatureFilter {
+
+ @Override public Class extends Facet> facetType() { return HiddenFacetForFeatureFilter.class; }
+ @Override public Precedence precedence() { return Precedence.DEFAULT; }
+
@Override
- public String hides(final VisibilityContext ic) {
- return null;
+ public String hides(final VisibilityContext vc) {
+ return null;
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForLayout.java
similarity index 73%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacet.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForLayout.java
index ce145305973..e6afa5f0713 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacetForLayout.java
@@ -25,37 +25,15 @@
import org.jspecify.annotations.NonNull;
/**
- * Hide a property, collection or action.
+ * Optionally hides a property, collection or action via layout.
*/
-public interface HiddenFacet
+public interface HiddenFacetForLayout
extends WhereValueFacet, HidingInteractionAdvisor {
- public enum Semantics {
-
- /** regular semantics */
- HIDDEN,
-
- /** inverted semantics */
- SHOWN;
-
- public boolean isHidden() {
- return this == HIDDEN;
- }
-
- public boolean isShown() {
- return this == SHOWN;
- }
- }
-
- // default semantics unless inverted
- default Semantics getSemantics() {
- return Semantics.HIDDEN;
- }
-
// -- PREDICATES
static boolean isAlwaysHidden(final @NonNull FacetHolder facetHolder) {
- return WhereValueFacet.isAlways(facetHolder, HiddenFacet.class);
+ return WhereValueFacet.isAlways(facetHolder, HiddenFacetForLayout.class);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/imperative/HasImperativeTextFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/imperative/HasImperativeTextFacetAbstract.java
index 37c14e97f8e..d21e35d9258 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/imperative/HasImperativeTextFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/imperative/HasImperativeTextFacetAbstract.java
@@ -21,6 +21,8 @@
import java.util.Objects;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.functional.Try;
@@ -34,7 +36,7 @@
import org.apache.causeway.core.metamodel.object.ManagedObjects;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class HasImperativeTextFacetAbstract
extends FacetAbstract
@@ -44,7 +46,8 @@ public class HasImperativeTextFacetAbstract
protected final TranslationContext translationContext;
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
protected HasImperativeTextFacetAbstract(
final Class extends Facet> facetType,
@@ -64,7 +67,7 @@ public final Try text(final ManagedObject object) {
}
@Override
- public final Intent getIntent() {
+ public final Intent intent() {
return Intent.UI_HINT;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
index d636ae92fed..4a5abe7520f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -34,13 +36,14 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class CollectionAccessorFacetViaAccessor
extends PropertyOrCollectionAccessorFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
public CollectionAccessorFacetViaAccessor(
final ObjectSpecification declaringType,
@@ -51,7 +54,7 @@ public CollectionAccessorFacetViaAccessor(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.ACCESSOR;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutAnnotation.java
index 1a42c66f40e..16bb823aa6b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutAnnotation.java
@@ -24,11 +24,11 @@
import org.apache.causeway.applib.annotation.CollectionLayout;
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetForLayoutAbstract;
import org.apache.causeway.core.metamodel.object.ManagedObject;
public class HiddenFacetForCollectionLayoutAnnotation
-extends HiddenFacetAbstract {
+extends HiddenFacetForLayoutAbstract {
public static Optional create(
final Optional collectionLayoutIfAny,
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java
index c7262bbbcd3..eec0cf04234 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java
@@ -23,14 +23,14 @@
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.layout.component.CollectionLayoutData;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
+import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetForLayoutAbstract;
import org.apache.causeway.core.metamodel.object.ManagedObject;
public class HiddenFacetForCollectionLayoutXml
-extends HiddenFacetAbstract {
+extends HiddenFacetForLayoutAbstract {
- public static Optional create(
+ public static Optional create(
final CollectionLayoutData collectionLayout,
final FacetHolder holder,
final Precedence precedence) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacet.java
index b05a26680f2..f7b56322e12 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacet.java
@@ -18,7 +18,6 @@
*/
package org.apache.causeway.core.metamodel.facets.members.disabled.method;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor;
import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -30,6 +29,6 @@
* In the standard Apache Causeway Programming Model, corresponds to invoking the
* disableXxx support method for the member.
*/
-public interface DisableForContextFacet extends Facet, DisablingInteractionAdvisor {
+public interface DisableForContextFacet extends DisablingInteractionAdvisor {
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
index 60ad25c09fc..dfb3ffba37f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.i18n.TranslatableString;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.commons.collections.Can;
@@ -34,13 +36,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class DisableForContextFacetViaMethod
extends DisableForContextFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final TranslationContext translationContext;
public DisableForContextFacetViaMethod(
@@ -52,7 +55,7 @@ public DisableForContextFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHECK_IF_DISABLED;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetForLayoutAbstract.java
similarity index 81%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetForLayoutAbstract.java
index c3a0fc53ece..85645c0f965 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetForLayoutAbstract.java
@@ -24,25 +24,25 @@
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.WhereValueFacetAbstract;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
import org.apache.causeway.core.metamodel.object.ManagedObject;
-public abstract class HiddenFacetAbstract
+public abstract class HiddenFacetForLayoutAbstract
extends WhereValueFacetAbstract
-implements HiddenFacet {
+implements HiddenFacetForLayout {
- public static final Class type() {
- return HiddenFacet.class;
+ public static final Class type() {
+ return HiddenFacetForLayout.class;
}
- public HiddenFacetAbstract(
+ public HiddenFacetForLayoutAbstract(
final Where where,
final FacetHolder holder) {
super(type(), holder, where);
}
- public HiddenFacetAbstract(
+ public HiddenFacetForLayoutAbstract(
final Where where,
final FacetHolder holder,
final Facet.Precedence precedence) {
@@ -50,13 +50,13 @@ public HiddenFacetAbstract(
}
// to instantiate contributed facets
- private HiddenFacetAbstract(final HiddenFacetAbstract toplevelFacet) {
+ private HiddenFacetForLayoutAbstract(final HiddenFacetForLayoutAbstract toplevelFacet) {
super(type(), toplevelFacet.facetHolder(), toplevelFacet.where());
}
@Override
- public String hides(final VisibilityContext ic) {
- return hiddenReason(ic.target(), ic.where());
+ public final String hides(final VisibilityContext ic) {
+ return hiddenReason(ic.target(), ic.iConstraint().where());
}
/**
@@ -68,7 +68,6 @@ public String hides(final VisibilityContext ic) {
@Override
public final void visitAttributes(final BiConsumer visitor) {
super.visitAttributes(visitor);
- visitor.accept("semantics", getSemantics());
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetFromLayoutPropertiesAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetFromLayoutPropertiesAbstract.java
deleted file mode 100644
index 96a622b0b76..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetFromLayoutPropertiesAbstract.java
+++ /dev/null
@@ -1,52 +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.members.hidden;
-
-import java.util.Properties;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-
-public abstract class HiddenFacetFromLayoutPropertiesAbstract extends HiddenFacetAbstract {
-
- protected static Where hidden(final Properties properties) {
- if(properties == null) {
- return null;
- }
- final String hidden = _Strings.emptyToNull(properties.getProperty("hidden"));
- if(hidden == null) {
- return null;
- }
- return Where.valueOf(hidden);
- }
-
- protected HiddenFacetFromLayoutPropertiesAbstract(final Where where, final FacetHolder holder) {
- super(where, holder);
- }
-
- @Override
- public String hiddenReason(final ManagedObject targetAdapter, final Where whereContext) {
- if(!where().includes(whereContext)) {
- return null;
- }
- return "Hidden on " + where().getFriendlyName();
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMember.java
similarity index 79%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacet.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMember.java
index 84b495b703e..b147146ac52 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMember.java
@@ -18,18 +18,16 @@
*/
package org.apache.causeway.core.metamodel.facets.members.hidden.method;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
import org.apache.causeway.core.metamodel.object.ManagedObject;
/**
- * Hide a property, collection or action based on the state of the target
+ * Optionally hides a property, collection or action based on the state of the target
* {@link ManagedObject object}.
*
- *
- * In the standard Apache Causeway Programming Model, corresponds to invoking the
+ *
In the standard Apache Causeway Programming Model, corresponds to invoking the
* hideXxx support method for the member.
*/
-public interface HideForContextFacet extends Facet, HidingInteractionAdvisor {
+public interface HiddenFacetForMember extends HidingInteractionAdvisor {
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMemberViaMethod.java
similarity index 70%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMemberViaMethod.java
index 89b26eae214..957c85ce6c0 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMemberViaMethod.java
@@ -23,29 +23,27 @@
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
+import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
import org.apache.causeway.core.metamodel.facets.ImperativeFacet;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
-import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+public record HiddenFacetForMemberViaMethod(
+ Can methods,
+ FacetHolder facetHolder
+ ) implements HiddenFacetForMember, ImperativeFacet {
+
+ @Override public Class extends Facet> facetType() { return HiddenFacetForMember.class; }
+ @Override public Precedence precedence() { return Precedence.DEFAULT; }
+ @Override public Intent intent() { return Intent.CHECK_IF_HIDDEN;}
-public class HideForContextFacetViaMethod
-extends HideForContextFacetAbstract
-implements ImperativeFacet {
+ public Can getMethods() { return methods(); }
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
-
- public HideForContextFacetViaMethod(final ResolvedMethod method, final FacetHolder holder) {
- super(holder);
- this.methods = ImperativeFacet.singleRegularMethod(method);
- }
-
- @Override
- public Intent getIntent() {
- return Intent.CHECK_IF_HIDDEN;
+ public HiddenFacetForMemberViaMethod(final ResolvedMethod method, final FacetHolder holder) {
+ this(ImperativeFacet.singleRegularMethod(method), holder);
}
@Override
@@ -60,8 +58,13 @@ public String hides(final VisibilityContext ic) {
@Override
public void visitAttributes(final BiConsumer visitor) {
- super.visitAttributes(visitor);
+ HiddenFacetForMember.super.visitAttributes(visitor);
ImperativeFacet.visitAttributes(this, visitor);
}
+
+ @Override
+ public String toString() {
+ return FacetUtil.toString(this);
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMemberViaMethodFactory.java
similarity index 91%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMemberViaMethodFactory.java
index d857fb2f997..dbd5e4fd0e3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HiddenFacetForMemberViaMethodFactory.java
@@ -26,11 +26,11 @@
import org.apache.causeway.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.causeway.core.metamodel.methods.MethodFinder;
-public class HideForContextFacetViaMethodFactory
+public class HiddenFacetForMemberViaMethodFactory
extends MemberSupportFacetFactoryAbstract {
@Inject
- public HideForContextFacetViaMethodFactory(final MetaModelContext mmc) {
+ public HiddenFacetForMemberViaMethodFactory(final MetaModelContext mmc) {
super(mmc, FeatureType.MEMBERS, MemberSupportPrefix.HIDE);
}
@@ -44,7 +44,7 @@ protected void search(
.peek(processMethodContext::removeMethod)
.forEach(hideMethod->{
addFacet(
- new HideForContextFacetViaMethod(
+ new HiddenFacetForMemberViaMethod(
hideMethod, processMethodContext.getFacetHolder()));
});
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetAbstract.java
deleted file mode 100644
index 29d25e5a352..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetAbstract.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.members.hidden.method;
-
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-
-public abstract class HideForContextFacetAbstract extends FacetAbstract implements HideForContextFacet {
-
- private static final Class extends Facet> type() {
- return HideForContextFacet.class;
- }
-
- public HideForContextFacetAbstract(final FacetHolder holder) {
- super(type(), holder);
- }
-
- public HideForContextFacetAbstract(final FacetHolder holder, final Facet.Precedence precedence) {
- super(type(), holder, precedence);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/navigation/NavigationFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/navigation/HiddenFacetForNavigation.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/navigation/NavigationFacet.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/navigation/HiddenFacetForNavigation.java
index 10fc0cc1643..9c8c6349c10 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/navigation/NavigationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/navigation/HiddenFacetForNavigation.java
@@ -18,13 +18,12 @@
*/
package org.apache.causeway.core.metamodel.facets.members.navigation;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet;
+import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenFacetForNoMembersAuthorized;
import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
/**
* Hides object members that would allow navigation to a domain type that is
- * {@link HiddenTypeFacet hidden} (typically due to security permissions).
+ * {@link HiddenFacetForNoMembersAuthorized hidden} (typically due to security permissions).
*/
-public interface NavigationFacet extends Facet, HidingInteractionAdvisor {
+public interface HiddenFacetForNavigation extends HidingInteractionAdvisor {
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java
index 762cf7ebcc6..4dcb5f79dd4 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java
@@ -28,6 +28,7 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
+import lombok.experimental.Accessors;
/**
* Adapter superclass for {@link Facet}s for {@link CallbackFacet}.
@@ -36,7 +37,7 @@ public abstract class CallbackFacetAbstract
extends FacetAbstract
implements CallbackFacet {
- @Getter(onMethod_ = {@Override})
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
private final Can methods;
private final Can asRegularMethods;
@@ -50,7 +51,7 @@ protected CallbackFacetAbstract(
}
@Override
- public final Intent getIntent() {
+ public final Intent intent() {
return Intent.LIFECYCLE;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/cssclass/method/CssClassFacetViaCssClassMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/cssclass/method/CssClassFacetViaCssClassMethod.java
index f3ecec740a0..5648f5f4986 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/cssclass/method/CssClassFacetViaCssClassMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/cssclass/method/CssClassFacetViaCssClassMethod.java
@@ -21,6 +21,7 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
@@ -32,13 +33,14 @@
import org.apache.causeway.core.metamodel.object.ManagedObject;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class CssClassFacetViaCssClassMethod
extends CssClassFacetAbstract
implements HasImperativeAspect {
- @Getter(onMethod_ = {@Override}) private final @NonNull ImperativeAspect imperativeAspect;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull ImperativeAspect imperativeAspect;
public static Optional create(
final @Nullable ResolvedMethod methodIfAny,
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/DisabledObjectFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/DisabledObjectFacet.java
index 395670db73e..370001f3058 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/DisabledObjectFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/DisabledObjectFacet.java
@@ -18,7 +18,6 @@
*/
package org.apache.causeway.core.metamodel.facets.object.disabled;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.object.immutable.ImmutableFacet;
import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor;
@@ -39,7 +38,7 @@
* @see ImmutableFacet
*/
public interface DisabledObjectFacet
-extends Facet, DisablingInteractionAdvisor {
+extends DisablingInteractionAdvisor {
/**
* Clone this facet onto another {@link FacetHolder}.
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java
index 41af51e99c6..b21da7680e8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java
@@ -35,13 +35,16 @@
import org.apache.causeway.core.metamodel.object.ManagedObject;
import lombok.Getter;
+import lombok.experimental.Accessors;
+
import org.jspecify.annotations.NonNull;
public class DisabledObjectFacetViaMethod
extends DisabledObjectFacetAbstract
implements HasImperativeAspect {
- @Getter(onMethod_ = {@Override}) private final @NonNull ImperativeAspect imperativeAspect;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull ImperativeAspect imperativeAspect;
private final TranslationContext translationContext;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorized.java
similarity index 75%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacet.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorized.java
index f05d8e798ed..961ff1781d2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorized.java
@@ -18,6 +18,11 @@
*/
package org.apache.causeway.core.metamodel.facets.object.hidden;
-public interface HiddenTypeFacet extends HiddenInstanceFacet {
+import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
+
+/**
+ * Optionally hides an object, based on whether non of its properties, collections and actions is visible.
+ */
+public interface HiddenFacetForNoMembersAuthorized extends HidingInteractionAdvisor {
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorizationFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorizedFactory.java
similarity index 84%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorizationFactory.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorizedFactory.java
index e501f314430..d46d90caeba 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorizationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorizedFactory.java
@@ -28,21 +28,21 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
/**
- * Installs the {@link HiddenTypeFacetFromAuthorization} on the
+ * Installs the {@link HiddenFacetForNoMembersAuthorizedImpl} on the
* {@link ObjectSpecification}.
*/
-public class HiddenTypeFacetFromAuthorizationFactory
+public class HiddenFacetForNoMembersAuthorizedFactory
extends FacetFactoryAbstract {
@Inject
- public HiddenTypeFacetFromAuthorizationFactory(final MetaModelContext mmc) {
+ public HiddenFacetForNoMembersAuthorizedFactory(final MetaModelContext mmc) {
super(mmc, FeatureType.OBJECTS_ONLY);
}
@Override
public void process(final ProcessClassContext processClassContext) {
final FacetHolder facetHolder = processClassContext.getFacetHolder();
- FacetUtil.addFacet(new HiddenTypeFacetFromAuthorization(facetHolder));
+ FacetUtil.addFacet(new HiddenFacetForNoMembersAuthorizedImpl(facetHolder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorizedImpl.java
similarity index 91%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorizedImpl.java
index 3245f2a36f5..85dfea926de 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForNoMembersAuthorizedImpl.java
@@ -25,19 +25,12 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
-public record HiddenTypeFacetFromAuthorization(
+public record HiddenFacetForNoMembersAuthorizedImpl(
FacetHolder facetHolder
- ) implements HiddenTypeFacet {
+ ) implements HiddenFacetForNoMembersAuthorized {
- @Override
- public Class extends Facet> facetType() {
- return HiddenTypeFacet.class;
- }
-
- @Override
- public Precedence precedence() {
- return Precedence.HIGH; // facet has final say, don't override;
- }
+ @Override public Class extends Facet> facetType() { return HiddenFacetForNoMembersAuthorized.class; }
+ @Override public Precedence precedence() { return Precedence.HIGH; }
@Override
public String hides(final VisibilityContext vc) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForObject.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacet.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForObject.java
index 217a021e1b7..e55b14915ee 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenFacetForObject.java
@@ -19,10 +19,11 @@
package org.apache.causeway.core.metamodel.facets.object.hidden;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
-public interface HiddenObjectFacet extends HiddenInstanceFacet {
+public interface HiddenFacetForObject extends HidingInteractionAdvisor {
/**
* Copy this facet to another {@link FacetHolder}.
@@ -31,6 +32,6 @@ public interface HiddenObjectFacet extends HiddenInstanceFacet {
* {@link ObjectSpecification}, and then copied down onto each of the spec's
* {@link ObjectMember}s.
*/
- public HiddenObjectFacet copyTo(FacetHolder holder);
+ public HiddenFacetForObject copyTo(FacetHolder holder);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenInstanceFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenInstanceFacet.java
deleted file mode 100644
index 2243cb6948c..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenInstanceFacet.java
+++ /dev/null
@@ -1,43 +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.object.hidden;
-
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
-
-/**
- * Mechanism for determining whether an object should be hidden.
- *
- * Even though all the properties of an object may themselves be visible, there
- * could be reasons to hide the object.
- *
- *
In the standard Apache Causeway Programming Model, typically corresponds to the
- * hidden method.
- *
- * @see HiddenFacet
- * @see HiddenObjectFacet
- * @see HiddenTypeFacet
- *
- * @apiNote An unification attempt on HiddenTypeFacet and HiddenObjectFacet into a single,
- * failed, because both facets must co-exist, where each has veto power (not one overruling the other).
- */
-public interface HiddenInstanceFacet extends Facet, HidingInteractionAdvisor {
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacetAbstract.java
deleted file mode 100644
index cd83642e1a2..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacetAbstract.java
+++ /dev/null
@@ -1,47 +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.object.hidden;
-
-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.interactions.vis.VisibilityContext;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-
-public abstract class HiddenObjectFacetAbstract
-extends FacetAbstract
-implements HiddenObjectFacet {
-
- private static final Class extends Facet> type() {
- return HiddenObjectFacet.class;
- }
-
- public HiddenObjectFacetAbstract(final FacetHolder holder) {
- super(type(), holder);
- }
-
- @Override
- public String hides(final VisibilityContext ic) {
- final ManagedObject toValidate = ic.target();
- return toValidate != null ? hiddenReason(toValidate) : null;
- }
-
- protected abstract String hiddenReason(ManagedObject toHide);
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenFacetForObjectViaMethod.java
similarity index 58%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenFacetForObjectViaMethod.java
index 0b3b36ebb7e..a75a2dbd070 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenFacetForObjectViaMethod.java
@@ -24,36 +24,30 @@
import org.jspecify.annotations.Nullable;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
+import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.HasImperativeAspect;
import org.apache.causeway.core.metamodel.facets.ImperativeAspect;
-import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenObjectFacet;
-import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenObjectFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenFacetForObject;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
import org.apache.causeway.core.metamodel.object.ManagedObject;
-import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+public record HiddenFacetForObjectViaMethod(
+ ImperativeAspect imperativeAspect,
+ FacetHolder facetHolder
+ ) implements HiddenFacetForObject, HasImperativeAspect {
-public class HiddenObjectFacetViaMethod
-extends HiddenObjectFacetAbstract
-implements HasImperativeAspect {
-
- @Getter(onMethod_ = {@Override}) private final @NonNull ImperativeAspect imperativeAspect;
-
- public static Optional create(
- final @Nullable ResolvedMethod methodIfAny,
- final FacetHolder holder) {
-
- return Optional.ofNullable(methodIfAny)
- .map(method->ImperativeAspect.singleRegularMethod(method, Intent.CHECK_IF_HIDDEN))
- .map(imperativeAspect->new HiddenObjectFacetViaMethod(imperativeAspect, holder));
- }
-
- private HiddenObjectFacetViaMethod(final ImperativeAspect imperativeAspect, final FacetHolder holder) {
- super(holder);
- this.imperativeAspect = imperativeAspect;
- }
+ public static Optional create(
+ final @Nullable ResolvedMethod methodIfAny,
+ final FacetHolder holder) {
+
+ return Optional.ofNullable(methodIfAny)
+ .map(method->ImperativeAspect.singleRegularMethod(method, Intent.CHECK_IF_HIDDEN))
+ .map(imperativeAspect->new HiddenFacetForObjectViaMethod(imperativeAspect, holder));
+ }
+
+ @Override public Class extends Facet> facetType() { return HiddenFacetForObject.class; }
+ @Override public Precedence precedence() { return Precedence.DEFAULT;}
@Override
public String hides(final VisibilityContext ic) {
@@ -62,19 +56,21 @@ public String hides(final VisibilityContext ic) {
}
@Override
- public String hiddenReason(final ManagedObject target) {
- final boolean isHidden = imperativeAspect.eval(target, false);
- return isHidden ? "Hidden" : null;
- }
-
- @Override
- public HiddenObjectFacetViaMethod copyTo(final FacetHolder holder) {
- return new HiddenObjectFacetViaMethod(imperativeAspect, holder);
+ public HiddenFacetForObjectViaMethod copyTo(final FacetHolder holder) {
+ return new HiddenFacetForObjectViaMethod(imperativeAspect, holder);
}
@Override
public void visitAttributes(final BiConsumer visitor) {
- super.visitAttributes(visitor);
+ HiddenFacetForObject.super.visitAttributes(visitor);
imperativeAspect.visitAttributes(visitor);
}
+
+ // -- HELPER
+
+ private String hiddenReason(final ManagedObject target) {
+ final boolean isHidden = imperativeAspect.eval(target, false);
+ return isHidden ? "Hidden" : null;
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java
index 3cb2fde883c..d1abdbfc5b2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java
@@ -50,7 +50,6 @@ public static Optional create(
@Override public Class extends Facet> facetType() { return IconFacet.class; }
@Override public Precedence precedence() { return Precedence.DEFAULT; }
- @Override public ImperativeAspect getImperativeAspect() { return imperativeAspect; }
@Override
public Optional icon(ManagedObject domainObject, IconSize iconSize) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
index 68bd46e1eba..0b00b1f5afb 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
@@ -51,7 +51,6 @@ public static Optional create(
@Override public Class extends Facet> facetType() { return IconFacet.class; }
@Override public Precedence precedence() { return Precedence.LOW; }
- @Override public ImperativeAspect getImperativeAspect() { return imperativeAspect; }
@Override
public Optional icon(ManagedObject domainObject, IconSize iconSize) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java
index b218b0fe685..6fcb0f11eb6 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java
@@ -68,11 +68,6 @@ public String layoutPrefix(final ManagedObject managedObject) {
}
}
- @Override
- public ImperativeAspect getImperativeAspect() {
- return imperativeAspect();
- }
-
@Override
public void visitAttributes(final BiConsumer visitor) {
LayoutPrefixFacet.super.visitAttributes(visitor);
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java
index 086d41fd642..1cabdaf197e 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java
@@ -18,7 +18,6 @@
*/
package org.apache.causeway.core.metamodel.facets.object.objectvalidprops.impl;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.object.objectvalidprops.ObjectValidPropertiesFacetAbstract;
import org.apache.causeway.core.metamodel.interactions.val.ObjectValidityContext;
@@ -28,13 +27,6 @@
public class ObjectValidPropertiesFacetImpl
extends ObjectValidPropertiesFacetAbstract {
- // REVIEW: should provide this rendering context, rather than hardcoding.
- // the net effect currently is that class members annotated with
- // @Hidden(where=Where.ANYWHERE) or @Disabled(where=Where.ANYWHERE) will indeed
- // be hidden/disabled, but will be visible/enabled (perhaps incorrectly)
- // for any other value for Where
- private final Where where = Where.ANYWHERE;
-
public ObjectValidPropertiesFacetImpl(final FacetHolder holder) {
super(holder);
}
@@ -46,20 +38,19 @@ public String invalidReason(
final ManagedObject adapter = context.target();
adapter.objSpec().streamProperties(MixedIn.EXCLUDED)
- .filter(property->property.isVisible(adapter, context.initiatedBy(), where).isVetoed()) // ignore hidden properties
- .filter(property->property.isUsable(adapter, context.initiatedBy(), where).isVetoed()) // ignore disabled properties
+ .filter(property->property.isVisible(adapter, context.iConstraint()).isVetoed()) // ignore hidden properties
+ .filter(property->property.isUsable(adapter, context.iConstraint()).isVetoed()) // ignore disabled properties
.forEach(property->{
- final ManagedObject value = property.get(adapter, context.initiatedBy());
- if (property.isAssociationValid(adapter, value, context.initiatedBy()).isVetoed()) {
+ final ManagedObject value = property.get(adapter, context.iConstraint().initiatedBy());
+ if (property.isAssociationValid(adapter, value, context.iConstraint()).isVetoed()) {
if (buf.length() > 0) {
buf.append(", ");
}
buf.append(property.getFriendlyName(context::target));
}
});
- if (buf.length() > 0) {
- return "Invalid properties: " + buf.toString();
- }
+ if (buf.length() > 0)
+ return "Invalid properties: " + buf.toString();
return null;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java
index 30485697243..a19a1bf1adb 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java
@@ -37,8 +37,8 @@
import org.apache.causeway.core.metamodel.facets.object.cssclass.method.CssClassFacetViaCssClassMethod;
import org.apache.causeway.core.metamodel.facets.object.disabled.DisabledObjectFacet;
import org.apache.causeway.core.metamodel.facets.object.disabled.method.DisabledObjectFacetViaMethod;
-import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenObjectFacet;
-import org.apache.causeway.core.metamodel.facets.object.hidden.method.HiddenObjectFacetViaMethod;
+import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenFacetForObject;
+import org.apache.causeway.core.metamodel.facets.object.hidden.method.HiddenFacetForObjectViaMethod;
import org.apache.causeway.core.metamodel.facets.object.icon.method.IconFacetViaIconMethod;
import org.apache.causeway.core.metamodel.facets.object.icon.method.IconFacetViaIconNameMethod;
import org.apache.causeway.core.metamodel.facets.object.layout.LayoutPrefixFacetViaMethod;
@@ -51,7 +51,7 @@
/**
* Installs {@link DisabledObjectFacetViaMethod}
- * and {@link HiddenObjectFacetViaMethod} on the
+ * and {@link HiddenFacetForObjectViaMethod} on the
* {@link ObjectSpecification}, and copies this facet onto each
* {@link ObjectMember}.
*
@@ -81,7 +81,7 @@ public final void process(final ProcessClassContext processClassContext) {
// priming 'toString()' into Precedence.INFERRED rank
inferTitleFromToString(processClassContext);
- processObjectSupport(processClassContext, ObjectSupportMethod.HIDDEN, NO_ARG, HiddenObjectFacetViaMethod::create);
+ processObjectSupport(processClassContext, ObjectSupportMethod.HIDDEN, NO_ARG, HiddenFacetForObjectViaMethod::create);
processObjectSupport(processClassContext, ObjectSupportMethod.DISABLED, NO_ARG, DisabledObjectFacetViaMethod::create);
processObjectSupport(processClassContext, ObjectSupportMethod.TITLE, NO_ARG, TitleFacetViaTitleMethod::create);
processObjectSupport(processClassContext, ObjectSupportMethod.LAYOUT, NO_ARG, LayoutPrefixFacetViaMethod::create);
@@ -101,7 +101,7 @@ public void process(final ProcessMethodContext processMethodContext) {
.map(disabledObjectFacet->disabledObjectFacet.clone(member))
.ifPresent(FacetUtil::addFacet);
- owningSpec.lookupFacet(HiddenObjectFacet.class)
+ owningSpec.lookupFacet(HiddenFacetForObject.class)
.map(hiddenObjectFacet->hiddenObjectFacet.copyTo(member))
.ifPresent(FacetUtil::addFacet);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/TitleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/TitleFacetAbstract.java
index 9a410be7f9b..db3689f0f2f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/TitleFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/TitleFacetAbstract.java
@@ -62,8 +62,8 @@ public boolean semanticEquals(final @NonNull Facet other) {
&& otherFacet instanceof ImperativeFacet) {
return ((ImperativeFacet)this)
- .getMethods()
- .equals(((ImperativeFacet)otherFacet).getMethods());
+ .methods()
+ .equals(((ImperativeFacet)otherFacet).methods());
}
return false;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
index 39e9a0041d0..f3eb799aaba 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
@@ -25,6 +25,8 @@
import java.util.function.BiConsumer;
import java.util.function.Consumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.annotation.Title;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._Strings;
@@ -35,8 +37,8 @@
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
import org.apache.causeway.commons.internal.reflection._Reflect.InterfacePolicy;
import org.apache.causeway.commons.internal.reflection._Reflect.TypeHierarchyPolicy;
-import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MessageTemplate;
+import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.Evaluators;
import org.apache.causeway.core.metamodel.facets.Evaluators.MethodEvaluator;
@@ -49,8 +51,8 @@
import lombok.AccessLevel;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
import lombok.RequiredArgsConstructor;
+import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -85,7 +87,8 @@ public static Optional create(
}
@Getter private final Can components;
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
protected TitleFacetViaTitleAnnotation(final Can components, final FacetHolder holder) {
super(holder);
@@ -109,7 +112,7 @@ protected TitleFacetViaTitleAnnotation(final Can components, fin
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.UI_HINT;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetFromToStringMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetFromToStringMethod.java
index 14a08e92da2..347a7256716 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetFromToStringMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetFromToStringMethod.java
@@ -21,6 +21,7 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
@@ -33,13 +34,14 @@
import org.apache.causeway.core.metamodel.facets.object.title.TitleRenderRequest;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class TitleFacetFromToStringMethod
extends TitleFacetAbstract
implements HasImperativeAspect {
- @Getter(onMethod_ = {@Override}) private final @NonNull ImperativeAspect imperativeAspect;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull ImperativeAspect imperativeAspect;
public static Optional create(
final @Nullable ResolvedMethod methodIfAny,
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
index 68e8a809598..706ea5731bf 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
@@ -36,6 +36,8 @@
import org.apache.causeway.core.metamodel.object.ManagedObjects;
import lombok.Getter;
+import lombok.experimental.Accessors;
+
import org.jspecify.annotations.NonNull;
import lombok.extern.slf4j.Slf4j;
@@ -44,7 +46,8 @@ public class TitleFacetViaTitleMethod
extends TitleFacetAbstract
implements HasImperativeAspect {
- @Getter(onMethod_ = {@Override}) private final @NonNull ImperativeAspect imperativeAspect;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull ImperativeAspect imperativeAspect;
private final TranslationContext translationContext;
public static Optional create(
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 f9d30c19c3a..da5cf046e84 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
@@ -20,19 +20,18 @@
import org.apache.causeway.applib.annotation.PromptStyle;
import org.apache.causeway.applib.annotation.SemanticsOf;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.commons.CanonicalInvoker;
import org.apache.causeway.core.metamodel.commons.ParameterConverters;
import org.apache.causeway.core.metamodel.consent.Allow;
import org.apache.causeway.core.metamodel.consent.Consent;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence;
import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
import org.apache.causeway.core.metamodel.facets.HasFacetedMethod;
import org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
import org.apache.causeway.core.metamodel.facets.object.value.CompositeValueUpdater.CompositeValueUpdaterForParameter;
import org.apache.causeway.core.metamodel.facets.object.value.CompositeValueUpdater.CompositeValueUpdaterForProperty;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.managed.ManagedProperty;
import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
@@ -68,20 +67,20 @@ default CompositeValueUpdater overrideFacets() {
// -- OBJECT ACTION MOCKUP
- @Override default Consent isVisible(final ManagedObject a, final InteractionInitiatedBy b, final Where c) { return Allow.DEFAULT; }
- @Override default Consent isUsable(final ManagedObject a, final InteractionInitiatedBy b, final Where c) { return Allow.DEFAULT; }
+ @Override default Consent isVisible(final ManagedObject a, final InteractionConstraint iConstraint) { return Allow.DEFAULT; }
+ @Override default Consent isUsable(final ManagedObject a, final InteractionConstraint iConstraint) { return Allow.DEFAULT; }
@Override default PromptStyle getPromptStyle() { return PromptStyle.INLINE_AS_IF_EDIT; }
@Override default SemanticsOf getSemantics() { return SemanticsOf.SAFE; }
@Override default ManagedObject execute(
final InteractionHead head, final Can parameters,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
return map(simpleExecute(head, parameters));
}
@Override default ManagedObject executeWithRuleChecking(
final InteractionHead head, final Can parameters,
- final InteractionInitiatedBy interactionInitiatedBy, final Where where) throws AuthorizationException {
- return execute(head, parameters, interactionInitiatedBy);
+ final InteractionConstraint iConstraint) throws AuthorizationException {
+ return execute(head, parameters, iConstraint);
}
// -- IMPLEMENTATIONS
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index c322b857d3e..45e154fac3e 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedConstructor;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
@@ -38,13 +40,14 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class ActionParameterAutoCompleteFacetViaMethod
extends ActionParameterAutoCompleteFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final ResolvedType paramSupportReturnType;
private final int minLength;
private final Optional patConstructor;
@@ -63,7 +66,7 @@ public ActionParameterAutoCompleteFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHOICES_OR_AUTOCOMPLETE;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index b66cf424592..4dcdcd7715a 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedConstructor;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
@@ -38,13 +40,14 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class ActionParameterChoicesFacetViaMethod
extends ActionParameterChoicesFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final ResolvedType paramSupportReturnType;
private final Optional patConstructor;
@@ -61,7 +64,7 @@ public ActionParameterChoicesFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHOICES_OR_AUTOCOMPLETE;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index 349f16a3c1e..6ff0c4f338c 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedConstructor;
@@ -34,13 +36,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class ActionParameterDefaultsFacetViaMethod
extends ActionParameterDefaultsFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final int paramNum;
private final Optional patConstructor;
@@ -63,7 +66,7 @@ public ActionParameterDefaultsFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.DEFAULTS;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/ActionParameterDisabledFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
index 9e17a7b44ee..84d71e16308 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
@@ -22,7 +22,6 @@
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.Consent.VetoReason;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor;
import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -33,7 +32,7 @@
* In the standard Apache Causeway Programming Model, corresponds to invoking the
* disableNXxx support method for an action.
*/
-public interface ActionParameterDisabledFacet extends Facet, DisablingInteractionAdvisor {
+public interface ActionParameterDisabledFacet extends DisablingInteractionAdvisor {
/**
* Reason why the parameter is disabled, or Optional.empts() if okay.
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
index 1557b86eeed..c2cb958daf1 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.i18n.TranslatableString;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.commons.collections.Can;
@@ -35,13 +37,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class ActionParameterDisabledFacetViaMethod
extends ActionParameterDisabledFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final TranslationContext translationContext;
private final Optional patConstructor;
@@ -57,7 +60,7 @@ public ActionParameterDisabledFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHECK_IF_VALID;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/ActionParameterHiddenFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/ActionParameterHiddenFacetAbstract.java
deleted file mode 100644
index 3f4c1677373..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/ActionParameterHiddenFacetAbstract.java
+++ /dev/null
@@ -1,51 +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.param.hide;
-
-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.interactions.vis.ParamVisibilityContext;
-import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
-
-public abstract class ActionParameterHiddenFacetAbstract
-extends FacetAbstract
-implements ActionParameterHiddenFacet {
-
- private static final Class extends Facet> type() {
- return ActionParameterHiddenFacet.class;
- }
-
- public ActionParameterHiddenFacetAbstract(final FacetHolder holder) {
- super(type(), holder);
- }
-
- @Override
- public String hides(final VisibilityContext context) {
- if (!(context instanceof ParamVisibilityContext)) {
- return null;
- }
- var actionArgVisibilityContext = (ParamVisibilityContext) context;
- return isHidden(
- actionArgVisibilityContext.target(),
- actionArgVisibilityContext.args())
- ? "Hidden"
- : null;
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/ActionParameterHiddenFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/HiddenFacetForActionParameter.java
similarity index 91%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/HiddenFacetForActionParameter.java
index 9def2099734..2481d0cf4e9 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/HiddenFacetForActionParameter.java
@@ -19,7 +19,6 @@
package org.apache.causeway.core.metamodel.facets.param.hide;
import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -31,8 +30,8 @@
* In the standard Apache Causeway Programming Model, corresponds to invoking the
* hideNXxx support method for an action.
*/
-public interface ActionParameterHiddenFacet
-extends Facet, HidingInteractionAdvisor {
+public interface HiddenFacetForActionParameter
+extends HidingInteractionAdvisor {
/**
* Whether the parameter is hidden.
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
index 2ea4457fba4..3dd97ac4ea7 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
@@ -24,11 +24,11 @@
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter;
import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchResult;
-import org.apache.causeway.core.metamodel.facets.param.hide.ActionParameterHiddenFacet;
+import org.apache.causeway.core.metamodel.facets.param.hide.HiddenFacetForActionParameter;
import org.apache.causeway.core.metamodel.facets.param.support.ActionParameterSupportFacetFactoryAbstract;
/**
- * Sets up {@link ActionParameterHiddenFacet}.
+ * Sets up {@link HiddenFacetForActionParameter}.
*/
public class ActionParameterHiddenFacetViaMethodFactory
extends ActionParameterSupportFacetFactoryAbstract {
@@ -45,7 +45,7 @@ protected void onSearchResult(
var hideMethod = searchResult.supportingMethod();
var patConstructor = searchResult.patConstructor();
addFacet(
- new ActionParameterHiddenFacetViaMethod(
+ new HiddenFacetForActionParameterViaMethod(
hideMethod, patConstructor, paramAsHolder));
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/HiddenFacetForActionParameterViaMethod.java
similarity index 63%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/HiddenFacetForActionParameterViaMethod.java
index 1b042af9ba6..5a0413760d7 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/HiddenFacetForActionParameterViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedConstructor;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
@@ -28,33 +30,40 @@
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.ImperativeFacet;
-import org.apache.causeway.core.metamodel.facets.param.hide.ActionParameterHiddenFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.param.hide.HiddenFacetForActionParameter;
+import org.apache.causeway.core.metamodel.interactions.vis.ParamVisibilityContext;
+import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
-import lombok.Getter;
-import org.jspecify.annotations.NonNull;
-
-public class ActionParameterHiddenFacetViaMethod
-extends ActionParameterHiddenFacetAbstract
-implements ImperativeFacet {
+public record HiddenFacetForActionParameterViaMethod(
+ Can methods,
+ Optional patConstructor,
+ FacetHolder facetHolder
+ ) implements HiddenFacetForActionParameter, ImperativeFacet {
+
+ @Override public Class extends Facet> facetType() { return HiddenFacetForActionParameter.class; }
+ @Override public Precedence precedence() { return Precedence.DEFAULT; }
+ @Override public Intent intent() { return Intent.CHECK_IF_VALID;}
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
- private final @NonNull Optional patConstructor;
-
- public ActionParameterHiddenFacetViaMethod(
+ public HiddenFacetForActionParameterViaMethod(
final ResolvedMethod method,
final Optional patConstructor,
final FacetHolder holder) {
-
- super(holder);
- this.methods = ImperativeFacet.singleMethod(method, patConstructor);
- this.patConstructor = patConstructor;
+ this(ImperativeFacet.singleMethod(method, patConstructor), patConstructor, holder);
}
@Override
- public Intent getIntent() {
- return Intent.CHECK_IF_VALID;
+ public String hides(final VisibilityContext context) {
+ if (!(context instanceof ParamVisibilityContext)) {
+ return null;
+ }
+ var actionArgVisibilityContext = (ParamVisibilityContext) context;
+ return isHidden(
+ actionArgVisibilityContext.target(),
+ actionArgVisibilityContext.args())
+ ? "Hidden"
+ : null;
}
@Override
@@ -74,18 +83,18 @@ public boolean isHidden(
@Override
public boolean semanticEquals(final @NonNull Facet otherFacet) {
- if(! (otherFacet instanceof ActionParameterHiddenFacetViaMethod)) {
+ if(! (otherFacet instanceof HiddenFacetForActionParameterViaMethod)) {
return false;
}
- var other = (ActionParameterHiddenFacetViaMethod)otherFacet;
+ var other = (HiddenFacetForActionParameterViaMethod)otherFacet;
return this.patConstructor.equals(other.patConstructor)
- && this.getMethods().equals(other.getMethods());
+ && this.methods().equals(other.methods());
}
@Override
public void visitAttributes(final BiConsumer visitor) {
- super.visitAttributes(visitor);
+ HiddenFacetForActionParameter.super.visitAttributes(visitor);
ImperativeFacet.visitAttributes(this, visitor);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java
index 40c70a6787a..1db3be69c8c 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java
@@ -21,6 +21,8 @@
import java.util.Optional;
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.i18n.TranslatableString;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.commons.collections.Can;
@@ -34,13 +36,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class ActionParameterValidationFacetViaMethod
extends ActionParameterValidationFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final TranslationContext translationContext;
private final Optional patConstructor;
@@ -56,7 +59,7 @@ public ActionParameterValidationFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHECK_IF_VALID;
}
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 10913b41585..dbf5b053d8a 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
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -33,13 +35,14 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyAccessorFacetViaAccessor
extends PropertyOrCollectionAccessorFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
public PropertyAccessorFacetViaAccessor(
final ObjectSpecification declaringType,
@@ -51,7 +54,7 @@ public PropertyAccessorFacetViaAccessor(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.ACCESSOR;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
index b5f98633ffe..52b0392efe0 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -33,13 +35,14 @@
import org.apache.causeway.core.metamodel.object.MmVisibilityUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyAutoCompleteFacetMethod
extends PropertyAutoCompleteFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final Class> choicesClass;
private final int minLength;
@@ -54,7 +57,7 @@ public PropertyAutoCompleteFacetMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHOICES_OR_AUTOCOMPLETE;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index 830d1d907f2..e5855bef4b2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -33,13 +35,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyChoicesFacetViaMethod
extends PropertyChoicesFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final Class> choicesClass;
public PropertyChoicesFacetViaMethod(
@@ -52,7 +55,7 @@ public PropertyChoicesFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHOICES_OR_AUTOCOMPLETE;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
index f1eb5b3c6aa..3e6a21e2664 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.exceptions.unrecoverable.UnknownTypeException;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
@@ -31,13 +33,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyDefaultFacetViaMethod
extends PropertyDefaultFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
public PropertyDefaultFacetViaMethod(
final ResolvedMethod method,
@@ -47,7 +50,7 @@ public PropertyDefaultFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.DEFAULTS;
}
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 c13cb9df11d..18afb5e8042 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
@@ -176,11 +176,9 @@ public String invalidates(final ValidityContext ic) {
if(!isPostable()) return null; // bale out
// if this is a mixin, then this ain't true.
- if(!(ic instanceof ProposedHolder)) return null;
+ if(!(ic instanceof final ProposedHolder ph)) return null;
- final ProposedHolder ph = (ProposedHolder) ic;
-
- final Object oldValue = getterFacetIfAny.getAssociationValueAsPojo(ic.target(), ic.initiatedBy());
+ final Object oldValue = getterFacetIfAny.getAssociationValueAsPojo(ic.target(), ic.iConstraint().initiatedBy());
final ManagedObject proposedAdapter = ph.proposed();
final Object proposedValue = proposedAdapter != null ? proposedAdapter.getPojo() : null;
@@ -192,9 +190,8 @@ public String invalidates(final ValidityContext ic) {
oldValue, proposedValue);
if (event != null && event.isInvalid()) {
final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable();
- if(reasonTranslatable != null) {
- return reasonTranslatable.translate(translationService, translationContext);
- }
+ if(reasonTranslatable != null)
+ return reasonTranslatable.translate(translationService, translationContext);
return event.getInvalidityReason();
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutAnnotation.java
index fa313b9c518..8e40de8f247 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutAnnotation.java
@@ -23,11 +23,11 @@
import org.apache.causeway.applib.annotation.PropertyLayout;
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetForLayoutAbstract;
import org.apache.causeway.core.metamodel.object.ManagedObject;
public class HiddenFacetForPropertyLayoutAnnotation
-extends HiddenFacetAbstract {
+extends HiddenFacetForLayoutAbstract {
public static Optional create(
final Optional propertyLayoutIfAny,
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java
index 2e3ded06dd0..d2fba54f62b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java
@@ -23,14 +23,14 @@
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.layout.component.PropertyLayoutData;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
+import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetForLayoutAbstract;
import org.apache.causeway.core.metamodel.object.ManagedObject;
public class HiddenFacetForPropertyLayoutXml
-extends HiddenFacetAbstract {
+extends HiddenFacetForLayoutAbstract {
- public static Optional create(
+ public static Optional create(
final PropertyLayoutData propertyLayout,
final FacetHolder holder,
final Precedence precedence) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
index e8395fe1f2a..bb2b49ff5c4 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -31,13 +33,14 @@
import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyClearFacetViaClearMethod
extends PropertyClearFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
public PropertyClearFacetViaClearMethod(final ResolvedMethod method, final FacetHolder holder) {
super(holder);
@@ -45,7 +48,7 @@ public PropertyClearFacetViaClearMethod(final ResolvedMethod method, final Facet
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.MODIFY_PROPERTY_SUPPORTING;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
index 68897a2e357..d4ed62aa867 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -31,13 +33,14 @@
import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyClearFacetViaSetterMethod
extends PropertyClearFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
public PropertyClearFacetViaSetterMethod(final ResolvedMethod method, final FacetHolder holder) {
super(holder);
@@ -45,7 +48,7 @@ public PropertyClearFacetViaSetterMethod(final ResolvedMethod method, final Face
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.MODIFY_PROPERTY;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
index 42a06b25c9a..67d5bf40663 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -29,13 +31,14 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyInitializationFacetViaSetterMethod
extends PropertyInitializationFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
public PropertyInitializationFacetViaSetterMethod(final ResolvedMethod method, final FacetHolder holder) {
super(holder);
@@ -43,7 +46,7 @@ public PropertyInitializationFacetViaSetterMethod(final ResolvedMethod method, f
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
// LIMITATION: we cannot distinguish between setXxx being called for a modify or for an initialization
// so we just assume its a setter.
return Intent.MODIFY_PROPERTY;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
index 73642bdd23b..d718108cdd5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
@@ -31,13 +33,14 @@
import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertySetterFacetViaSetterMethod
extends PropertySetterFacetAbstract
implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
public PropertySetterFacetViaSetterMethod(final ResolvedMethod method, final FacetHolder holder) {
super(holder);
@@ -45,7 +48,7 @@ public PropertySetterFacetViaSetterMethod(final ResolvedMethod method, final Fac
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.MODIFY_PROPERTY;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java
index 6d45cd1d404..e0f7c6d55fa 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java
@@ -20,6 +20,8 @@
import java.util.function.BiConsumer;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.i18n.TranslatableString;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.commons.collections.Can;
@@ -32,11 +34,12 @@
import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+import lombok.experimental.Accessors;
public class PropertyValidateFacetViaMethod extends PropertyValidateFacetAbstract implements ImperativeFacet {
- @Getter(onMethod_ = {@Override}) private final @NonNull Can methods;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final @NonNull Can methods;
private final TranslationContext translationContext;
public PropertyValidateFacetViaMethod(
@@ -48,7 +51,7 @@ public PropertyValidateFacetViaMethod(
}
@Override
- public Intent getIntent() {
+ public Intent intent() {
return Intent.CHECK_IF_VALID;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/DisablingInteractionAdvisor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/DisablingInteractionAdvisor.java
index c7f2440c20c..2620328e176 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/DisablingInteractionAdvisor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/DisablingInteractionAdvisor.java
@@ -21,7 +21,8 @@
import java.util.Optional;
import org.apache.causeway.core.metamodel.consent.Consent.VetoReason;
-import org.apache.causeway.core.metamodel.facetapi.FacetWithAttributes.DisablingOrEnabling;
+import org.apache.causeway.core.metamodel.consent.InteractionAdvisor;
+import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.use.UsabilityContext;
/**
@@ -32,7 +33,7 @@
* @see HidingInteractionAdvisor
*/
public interface DisablingInteractionAdvisor
-extends InteractionAdvisorFacet, DisablingOrEnabling {
+extends InteractionAdvisor, Facet {
/**
* Whether the rule represented by this facet disables the member to which
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/HidingInteractionAdvisor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/HidingInteractionAdvisor.java
index 37ec3e6e4ed..1d676d2b80d 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/HidingInteractionAdvisor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/HidingInteractionAdvisor.java
@@ -18,18 +18,33 @@
*/
package org.apache.causeway.core.metamodel.interactions;
-import org.apache.causeway.core.metamodel.facetapi.FacetWithAttributes.HidingOrShowing;
+import org.apache.causeway.core.metamodel.consent.InteractionAdvisor;
+import org.apache.causeway.core.metamodel.facetapi.Facet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
+import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenFacetForObject;
+import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenFacetForNoMembersAuthorized;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
/**
- * Mix-in interface for facets that can advise as to whether a member should be
- * hidden.
+ * Mechanism for determining whether an object or member should be hidden.
*
+ * Even though all the properties of an object may themselves be visible, there
+ * could be reasons to hide the object.
+ *
+ *
In the standard Apache Causeway Programming Model, typically corresponds to the
+ * hidden method.
+ *
+ * @see HiddenFacetForLayout
+ * @see HiddenFacetForObject
+ * @see HiddenFacetForNoMembersAuthorized
* @see DisablingInteractionAdvisor
* @see ValidatingInteractionAdvisor
+ *
+ * @apiNote An unification attempt on HiddenTypeFacet and HiddenObjectFacet into a single,
+ * failed, because both facets must co-exist, where each has veto power (not one overruling the other).
*/
public interface HidingInteractionAdvisor
-extends InteractionAdvisorFacet, HidingOrShowing {
+extends InteractionAdvisor, Facet {
/**
* Whether the rule represented by this facet hides the member to which it
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionAdvisorFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionAdvisorFacet.java
deleted file mode 100644
index 8d51bc3d318..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionAdvisorFacet.java
+++ /dev/null
@@ -1,43 +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.interactions;
-
-import org.apache.causeway.core.metamodel.consent.Allow;
-import org.apache.causeway.core.metamodel.consent.Consent;
-import org.apache.causeway.core.metamodel.consent.InteractionAdvisor;
-import org.apache.causeway.core.metamodel.consent.Veto;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-
-/**
- * Used by {@link Consent} (specifically the main implementations {@link Allow}
- * and {@link Veto}), with the idea being that the only things that can create
- * {@link Consent} objects are {@link Facet}s.
- *
- *
- * TODO: note, this is a work-in-progress, because the DnD viewer in particular
- * creates its own {@link Allow}s and {@link Veto}s. The constructors that it
- * uses have been deprecated to flag that the DnD logic should move into
- * {@link Facet}s that implement this interface.
- *
- * @author Dan Haywood
- *
- */
-public interface InteractionAdvisorFacet extends InteractionAdvisor, Facet {
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionConstraint.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionConstraint.java
new file mode 100644
index 00000000000..a6c20e82612
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionConstraint.java
@@ -0,0 +1,38 @@
+/*
+ * 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.interactions;
+
+import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+
+public record InteractionConstraint(
+ WhatViewer whatViewer,
+ InteractionInitiatedBy initiatedBy,
+ Where where
+ ) {
+
+ public InteractionConstraint withWhere(final Where where) {
+ return new InteractionConstraint(whatViewer, initiatedBy, where);
+ }
+
+ public InteractionConstraint withInitiatedBy(final InteractionInitiatedBy initiatedBy) {
+ return new InteractionConstraint(whatViewer, initiatedBy, where);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionContext.java
index c7c15861a05..44e5ca52f32 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionContext.java
@@ -19,10 +19,8 @@
package org.apache.causeway.core.metamodel.interactions;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.InteractionEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -71,10 +69,13 @@ public interface InteractionContext {
*/
InteractionContextType interactionType();
+
/**
+ * Which viewer.
+ * Where the element is to be rendered.
* How the interaction was initiated.
*/
- InteractionInitiatedBy initiatedBy();
+ InteractionConstraint iConstraint();
/**
* The identifier of the object or member that this interaction is being
@@ -93,11 +94,6 @@ public interface InteractionContext {
*/
InteractionHead head();
- /**
- * Where the element is to be rendered.
- */
- Where where();
-
/**
* The target object that this interaction is associated with.
*/
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionUtils.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionUtils.java
index d88b2f462a9..f78ecaed2c8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionUtils.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionUtils.java
@@ -25,8 +25,6 @@
import org.apache.causeway.applib.Identifier;
import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.core.config.CausewayConfiguration;
-import org.apache.causeway.core.config.environment.DeploymentType;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
import org.apache.causeway.core.metamodel.consent.Consent;
import org.apache.causeway.core.metamodel.consent.InteractionAdvisor;
@@ -39,7 +37,6 @@
import org.apache.causeway.core.metamodel.interactions.use.UsabilityContext;
import org.apache.causeway.core.metamodel.interactions.val.ValidityContext;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
@@ -139,12 +136,6 @@ public InteractionResultSet isValidResultSet(
return resultSet.add(isValidResult(facetHolder, context));
}
- public RenderPolicy renderPolicy(final ManagedObject ownerAdapter) {
- return new RenderPolicy(
- determineIfHiddenPolicyFrom(ownerAdapter),
- determineIfDisabledPolicyFrom(ownerAdapter));
- }
-
// -- HELPER
/**
@@ -166,14 +157,12 @@ private Optional guardAgainstEmptyReasonString(
}
private static boolean compatible(final InteractionAdvisor advisor, final InteractionContext ic) {
- if(ic.initiatedBy().isPassThrough()
- && isDomainEventAdvisor(advisor)) {
- //[CAUSEWAY-3810] when pass-through, then don't trigger any domain events
+ if(ic.iConstraint().initiatedBy().isPassThrough()
+ && isDomainEventAdvisor(advisor))
+ //[CAUSEWAY-3810] when pass-through, then don't trigger any domain events
return false;
- }
- if(advisor instanceof ActionDomainEventFacet) {
- return ic instanceof ActionInteractionContext;
- }
+ if(advisor instanceof ActionDomainEventFacet)
+ return ic instanceof ActionInteractionContext;
return true;
}
@@ -181,25 +170,4 @@ private static boolean isDomainEventAdvisor(final InteractionAdvisor advisor) {
return advisor instanceof DomainEventFacetAbstract;
}
- private CausewayConfiguration.Prototyping.IfHiddenPolicy determineIfHiddenPolicyFrom(final ManagedObject ownerAdapter) {
- DeploymentType deploymentType = ownerAdapter.getSystemEnvironment().deploymentType();
- switch (deploymentType) {
- case PROTOTYPING:
- return ownerAdapter.getConfiguration().prototyping().ifHiddenPolicy();
- case PRODUCTION:
- default:
- return CausewayConfiguration.Prototyping.IfHiddenPolicy.HIDE;
- }
- }
-
- private CausewayConfiguration.Prototyping.IfDisabledPolicy determineIfDisabledPolicyFrom(final ManagedObject ownerAdapter) {
- DeploymentType deploymentType = ownerAdapter.getSystemEnvironment().deploymentType();
- switch (deploymentType) {
- case PROTOTYPING:
- return ownerAdapter.getConfiguration().prototyping().ifDisabledPolicy();
- case PRODUCTION:
- default:
- return CausewayConfiguration.Prototyping.IfDisabledPolicy.DISABLE;
- }
- }
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/RenderPolicy.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/RenderPolicy.java
index ad171b9d1a2..f86ead9c360 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/RenderPolicy.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/RenderPolicy.java
@@ -23,6 +23,7 @@
import org.jspecify.annotations.NonNull;
import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.metamodel.context.MetaModelContext;
/**
* Troubleshooting Visibility and Usability
@@ -66,7 +67,22 @@ public record RenderPolicy(
*/
CausewayConfiguration.Prototyping.@NonNull IfDisabledPolicy ifDisabledPolicy
) implements Serializable {
-
+
+ /**
+ * Counterpart to {@link #forActionParameters()}, that is objects and members, but not parameters.
+ */
+ public static RenderPolicy forNonActionParam(MetaModelContext mmc) {
+ return new RenderPolicy(
+ switch (mmc.getSystemEnvironment().deploymentType()) {
+ case PROTOTYPING->mmc.getConfiguration().prototyping().ifHiddenPolicy();
+ case PRODUCTION->CausewayConfiguration.Prototyping.IfHiddenPolicy.HIDE;
+ },
+ switch (mmc.getSystemEnvironment().deploymentType()) {
+ case PROTOTYPING -> mmc.getConfiguration().prototyping().ifDisabledPolicy();
+ case PRODUCTION -> CausewayConfiguration.Prototyping.IfDisabledPolicy.DISABLE;
+ });
+ }
+
/**
* Always HIDE and DISABLE.
*/
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ValidatingInteractionAdvisor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ValidatingInteractionAdvisor.java
index 469505eeab3..33c569418c3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ValidatingInteractionAdvisor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ValidatingInteractionAdvisor.java
@@ -18,8 +18,8 @@
*/
package org.apache.causeway.core.metamodel.interactions;
+import org.apache.causeway.core.metamodel.consent.InteractionAdvisor;
import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetWithAttributes.Validating;
import org.apache.causeway.core.metamodel.interactions.val.ValidityContext;
/**
@@ -33,7 +33,8 @@
* @see DisablingInteractionAdvisor
* @see HidingInteractionAdvisor
*/
-public interface ValidatingInteractionAdvisor extends InteractionAdvisorFacet, Validating {
+public interface ValidatingInteractionAdvisor
+extends InteractionAdvisor, Facet {
/**
* Whether the validation represented by this facet passes or fails.
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/WhatViewer.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/WhatViewer.java
new file mode 100644
index 00000000000..73e8c94dcca
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/WhatViewer.java
@@ -0,0 +1,44 @@
+/*
+ * 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.interactions;
+
+import org.apache.causeway.applib.services.command.CommandExecutorService;
+import org.apache.causeway.applib.services.wrapper.WrapperFactory;
+
+/**
+ * Viewer identifier, used for viewer specific feature filtering.
+ */
+public record WhatViewer(
+ String viewerId) {
+
+ /**
+ * Used by {@link WrapperFactory}, {@link CommandExecutorService} and Object title interaction.
+ */
+ public static WhatViewer noViewer() {
+ return new WhatViewer("NoViewer");
+ }
+
+ /**
+ * @deprecated for refactoring only
+ */
+ @Deprecated
+ public static WhatViewer invalid() {
+ return new WhatViewer("invalid");
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/acc/ObjectTitleContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/acc/ObjectTitleContext.java
index 089a80f6db3..8f25f929c1d 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/acc/ObjectTitleContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/acc/ObjectTitleContext.java
@@ -23,8 +23,10 @@
import org.apache.causeway.applib.services.wrapper.events.ObjectTitleEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
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.MmUnwrapUtils;
@@ -36,8 +38,7 @@ public record ObjectTitleContext(
InteractionContextType interactionType,
Identifier identifier,
InteractionHead head,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
String title)
implements AccessContext {
@@ -46,9 +47,9 @@ public ObjectTitleContext(
final Identifier identifier,
final String title,
final InteractionInitiatedBy initiatedBy) {
-
this(InteractionContextType.OBJECT_TITLE,
- identifier, InteractionHead.regular(targetAdapter), initiatedBy, Where.NOT_SPECIFIED,
+ identifier, InteractionHead.regular(targetAdapter),
+ new InteractionConstraint(WhatViewer.noViewer(), initiatedBy, Where.NOT_SPECIFIED),
title);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java
index 86e3fb2962e..9bb92d294b5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java
@@ -24,11 +24,11 @@
import org.jspecify.annotations.NonNull;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.functional.Railway;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.ManagedObjects;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
@@ -66,17 +66,17 @@ public static interface ParameterInvalidCallback {
public static ActionInteraction start(
final @NonNull ManagedObject owner,
final @NonNull String memberId,
- final @NonNull Where where) {
- return startWithMultiselect(owner, memberId, where, Can::empty);
+ final @NonNull InteractionConstraint iConstraint) {
+ return startWithMultiselect(owner, memberId, iConstraint, Can::empty);
}
public static ActionInteraction startWithMultiselect(
final @NonNull ManagedObject owner,
final @NonNull String actionId,
- final @NonNull Where where,
+ final @NonNull InteractionConstraint iConstraint,
final @NonNull MultiselectChoices multiselectChoices) {
- var managedAction = ManagedAction.lookupActionWithMultiselect(owner, actionId, where, multiselectChoices);
+ var managedAction = ManagedAction.lookupActionWithMultiselect(owner, actionId, iConstraint, multiselectChoices);
final InteractionRailway railway = managedAction.isPresent()
? InteractionRailway.success(managedAction.get())
@@ -84,7 +84,7 @@ public static ActionInteraction startWithMultiselect(
return new ActionInteraction(
actionId,
- managedAction.map(x->x.getAction()),
+ managedAction.map(ManagedAction::getAction),
railway);
}
@@ -92,7 +92,7 @@ public static ActionInteraction startWithMultiselect(
public static ActionInteraction startAsBoundToProperty(
final ManagedProperty associatedWithProperty,
final String memberId,
- final Where where) {
+ final InteractionConstraint iConstraint) {
var propertyOwner = associatedWithProperty.getOwner();
var prop = associatedWithProperty.getMetaModel();
var elementType = prop.getElementType();
@@ -117,12 +117,12 @@ public static ActionInteraction startAsBoundToProperty(
var mixinAction = valueFacet.selectCompositeValueMixinForProperty(associatedWithProperty);
if(mixinAction.isPresent()) {
- var managedAction = ManagedAction.of(compositeValue, mixinAction.get(), where);
+ var managedAction = ManagedAction.of(compositeValue, mixinAction.get(), iConstraint);
return ActionInteraction.wrap(managedAction);
}
}
// fallback if not a composite value
- return ActionInteraction.start(propertyOwner, memberId, where);
+ return ActionInteraction.start(propertyOwner, memberId, iConstraint);
}
/** Supports composite-value-types via mixin (in case detected). */
@@ -130,7 +130,7 @@ public static ActionInteraction startAsBoundToParameter(
final ParameterNegotiationModel parameterNegotiationModel,
final int paramIndex,
final String memberId,
- final Where where) {
+ final InteractionConstraint iConstraint) {
var actionOwner = parameterNegotiationModel.getActionTarget();
var param = parameterNegotiationModel.getParamModels().getElseFail(paramIndex);
@@ -155,13 +155,13 @@ public static ActionInteraction startAsBoundToParameter(
var mixinAction = valueFacet.selectCompositeValueMixinForParameter(parameterNegotiationModel, paramIndex);
if(mixinAction.isPresent()) {
- var managedAction = ManagedAction.of(compositeValue, mixinAction.get(), where);
+ var managedAction = ManagedAction.of(compositeValue, mixinAction.get(), iConstraint);
return ActionInteraction.wrap(managedAction);
}
}
// else if not a composite value
- return ActionInteraction.start(actionOwner, memberId, where);
+ return ActionInteraction.start(actionOwner, memberId, iConstraint);
}
public static ActionInteraction wrap(final @NonNull ManagedAction managedAction) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/CollectionInteraction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/CollectionInteraction.java
index d8879f43140..371f187c6d5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/CollectionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/CollectionInteraction.java
@@ -24,7 +24,7 @@
import org.jspecify.annotations.NonNull;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.object.ManagedObject;
public record CollectionInteraction(
@@ -34,9 +34,9 @@ public record CollectionInteraction(
public static final CollectionInteraction start(
final @NonNull ManagedObject owner,
final @NonNull String memberId,
- final @NonNull Where where) {
+ final @NonNull InteractionConstraint iConstraint) {
- var managedCollection = ManagedCollection.lookupCollection(owner, memberId, where);
+ var managedCollection = ManagedCollection.lookupCollection(owner, memberId, iConstraint);
final InteractionRailway railway = managedCollection.isPresent()
? InteractionRailway.success(managedCollection.get())
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 5b21c9409c2..416273e3d05 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
@@ -25,7 +25,6 @@
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.registry.ServiceRegistry;
import org.apache.causeway.applib.services.routing.RoutingService;
import org.apache.causeway.commons.collections.Can;
@@ -35,6 +34,7 @@
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.ManagedObjects;
@@ -55,27 +55,26 @@ public final class ManagedAction extends ManagedMember {
public static final ManagedAction of(
final @NonNull ManagedObject owner,
final @NonNull ObjectAction action,
- final @NonNull Where where) {
- return new ManagedAction(owner, action, where, Can::empty);
+ final @NonNull InteractionConstraint iConstraint) {
+ return new ManagedAction(owner, action, iConstraint, Can::empty);
}
public static final Optional lookupAction(
final @NonNull ManagedObject owner,
final @NonNull String memberId,
- final @NonNull Where where) {
+ final @NonNull InteractionConstraint iConstraint) {
return ManagedMember.lookup(owner.objSpec(), Identifier.Type.ACTION, memberId)
- .map(objectAction -> of(owner, objectAction, where));
+ .map(objectAction -> of(owner, objectAction, iConstraint));
}
public static final Optional lookupActionWithMultiselect(
final @NonNull ManagedObject owner,
final @NonNull String memberId,
- final @NonNull Where where,
+ final @NonNull InteractionConstraint iConstraint,
final @NonNull MultiselectChoices multiselectChoices) {
-
return ManagedMember.lookup(owner.objSpec(), Identifier.Type.ACTION, memberId)
- .map(objectAction -> new ManagedAction(owner, objectAction, where, multiselectChoices));
+ .map(objectAction -> new ManagedAction(owner, objectAction, iConstraint, multiselectChoices));
}
// -- IMPLEMENTATION
@@ -86,10 +85,10 @@ public static final Optional lookupActionWithMultiselect(
private ManagedAction(
final @NonNull ManagedObject owner,
final @NonNull ObjectAction action,
- final @NonNull Where where,
+ final @NonNull InteractionConstraint iConstraint,
final @NonNull MultiselectChoices multiselectChoices) {
- super(owner, where);
+ super(owner, iConstraint);
/* entities might become removed, but even though removed, an entity delete mixin say,
may still want to provide an action result, that does not need the mixee instance to be produced;
eg. delete ApplicationUser mixin that returns a collection of all remaining users
@@ -136,11 +135,10 @@ public Identifier.Type getMemberType() {
public Railway invoke(
final @NonNull Can actionParameters,
final @NonNull InteractionInitiatedBy interactionInitiatedBy) {
-
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, iConstraint());
return Railway.success(route(actionResult));
}
@@ -153,12 +151,11 @@ public Railway invoke(
@SneakyThrows
public final ManagedObject invokeWithRuleChecking(
final @NonNull Can actionParameters) throws AuthorizationException {
-
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
.executeWithRuleChecking(
- interactionHead(), actionParameters, InteractionInitiatedBy.USER, getWhere());
+ interactionHead(), actionParameters, iConstraint());
return route(actionResult);
}
@@ -167,9 +164,8 @@ public final ManagedObject invokeWithRuleChecking(
private ManagedObject route(final @Nullable ManagedObject actionResult) {
- if(ManagedObjects.isNullOrUnspecifiedOrEmpty(actionResult)) {
- return ManagedObject.empty(action.getReturnType());
- }
+ if(ManagedObjects.isNullOrUnspecifiedOrEmpty(actionResult))
+ return ManagedObject.empty(action.getReturnType());
var resultPojo = actionResult.getPojo();
var objManager = mmc().getObjectManager();
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedCollection.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedCollection.java
index 6cf1b7e8b9e..dbd5515e152 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedCollection.java
@@ -21,18 +21,19 @@
import java.util.Optional;
import java.util.stream.Stream;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
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.OneToManyAssociation;
import org.apache.causeway.core.metamodel.tabular.DataTableInteractive;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
public final class ManagedCollection extends ManagedMember {
@@ -41,17 +42,16 @@ public final class ManagedCollection extends ManagedMember {
public static final ManagedCollection of(
final @NonNull ManagedObject owner,
final @NonNull OneToManyAssociation collection,
- final @NonNull Where where) {
- return new ManagedCollection(owner, collection, where);
+ final @NonNull InteractionConstraint iConstraint) {
+ return new ManagedCollection(owner, collection, iConstraint);
}
public static final Optional lookupCollection(
final @NonNull ManagedObject owner,
final @NonNull String memberId,
- final @NonNull Where where) {
-
+ final @NonNull InteractionConstraint iConstraint) {
return ManagedMember.lookup(owner.objSpec(), Identifier.Type.COLLECTION, memberId)
- .map(objectAction -> of(owner, objectAction, where));
+ .map(coll -> of(owner, coll, iConstraint));
}
// -- IMPLEMENTATION
@@ -61,9 +61,8 @@ public static final Optional lookupCollection(
private ManagedCollection(
final @NonNull ManagedObject owner,
final @NonNull OneToManyAssociation collection,
- final @NonNull Where where) {
-
- super(owner, where);
+ final @NonNull InteractionConstraint iConstraint) {
+ super(owner, iConstraint);
this.collection = collection;
}
@@ -90,11 +89,10 @@ public ManagedObject getCollectionValue() {
/**
* If visibility is vetoed, returns an empty Stream.
- * @param interactionInitiatedBy
* @return Stream of this collection's element values as to be used by the UI for representation
*/
- public Stream streamElements(final InteractionInitiatedBy interactionInitiatedBy) {
- var valueAdapter = getCollection().get(getOwner(), interactionInitiatedBy);
+ public Stream streamElements(final InteractionInitiatedBy initiatedBy) {
+ var valueAdapter = getCollection().get(getOwner(), initiatedBy);
return CollectionFacet.streamAdapters(valueAdapter);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java
index 036d664117b..d573c56c726 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java
@@ -23,10 +23,9 @@
import org.jspecify.annotations.NonNull;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.internal.base._Casts;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.consent.Veto;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
@@ -34,6 +33,7 @@
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
+import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -58,8 +58,7 @@ public enum RepresentationMode {
}
@Getter @NonNull private ManagedObject owner;
-
- @Getter @NonNull private final Where where;
+ @Getter @Accessors(fluent = true) @NonNull private final InteractionConstraint iConstraint;
/**
* Allows a managed property of a view model to replace its owner with a clone.
@@ -110,47 +109,32 @@ public Optional getDescription() {
* @return non-empty if hidden
*/
public Optional checkVisibility() {
-
try {
- var visibilityConsent =
- getMetaModel()
- .isVisible(getOwner(), InteractionInitiatedBy.USER, where);
-
+ var visibilityConsent = getMetaModel()
+ .isVisible(getOwner(), iConstraint);
return visibilityConsent.isVetoed()
- ? Optional.of(InteractionVeto.hidden(visibilityConsent))
- : Optional.empty();
-
+ ? Optional.of(InteractionVeto.hidden(visibilityConsent))
+ : Optional.empty();
} catch (final Exception ex) {
-
log.warn(ex.getLocalizedMessage(), ex);
return Optional.of(InteractionVeto.hidden(new Veto("failure during visibility evaluation")));
-
}
-
}
/**
* @return non-empty if not usable/editable (meaning if read-only)
*/
public Optional checkUsability() {
-
try {
-
- var usabilityConsent =
- getMetaModel()
- .isUsable(getOwner(), InteractionInitiatedBy.USER, where);
-
+ var usabilityConsent = getMetaModel()
+ .isUsable(getOwner(), iConstraint);
return usabilityConsent.isVetoed()
- ? Optional.of(InteractionVeto.readonly(usabilityConsent))
- : Optional.empty();
-
+ ? Optional.of(InteractionVeto.readonly(usabilityConsent))
+ : Optional.empty();
} catch (final Exception ex) {
-
log.warn(ex.getLocalizedMessage(), ex);
return Optional.of(InteractionVeto.readonly(new Veto("failure during usability evaluation")));
-
}
-
}
protected static Optional lookup(
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedProperty.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedProperty.java
index 9dd7f766f72..09c4fe52edb 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedProperty.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedProperty.java
@@ -20,22 +20,22 @@
import java.util.Optional;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.binding.Observable;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.binding._Observables;
import org.apache.causeway.commons.internal.binding._Observables.LazyObservable;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.consent.Veto;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
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 lombok.Getter;
-import org.jspecify.annotations.NonNull;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -47,33 +47,27 @@ public final class ManagedProperty
public static final ManagedProperty of(
final @NonNull ManagedObject owner,
final @NonNull OneToOneAssociation property,
- final @NonNull Where where) {
- return new ManagedProperty(owner, property, where);
+ final @NonNull InteractionConstraint iConstraint) {
+ return new ManagedProperty(owner, property, iConstraint);
}
public static final Optional lookupProperty(
final @NonNull ManagedObject owner,
final @NonNull String memberId,
- final @NonNull Where where) {
-
+ final @NonNull InteractionConstraint iConstraint) {
return ManagedMember.lookup(owner.objSpec(), Identifier.Type.PROPERTY, memberId)
- .map(objectAction -> of(owner, objectAction, where));
+ .map(prop -> of(owner, prop, iConstraint));
}
// -- IMPLEMENTATION
@Getter private final OneToOneAssociation property;
- //XXX suggestion: instead of holding the 'owner' object, let it hold a supplier of the 'owner' object,
- //such that the supplier always returns the actual owner evaluated lazily without memoization.
- //Such a change would better support eg.
- //org.apache.causeway.viewer.wicket.model.models.ScalarPropertyModel.getManagedProperty()
- //Or as an alternative use a memento instead of the ManagedObject.
private ManagedProperty(
final @NonNull ManagedObject owner,
final @NonNull OneToOneAssociation property,
- final @NonNull Where where) {
- super(owner, where);
+ final @NonNull InteractionConstraint iConstraint) {
+ super(owner, iConstraint);
this.property = property;
observablePropValue = _Observables.lazy(this::reassessPropertyValue);
}
@@ -97,17 +91,13 @@ public Can getAssociatedActions() {
public Optional checkValidity(final ManagedObject proposedNewValue) {
try {
var validityConsent =
- property.isAssociationValid(getOwner(), proposedNewValue, InteractionInitiatedBy.USER);
-
+ property.isAssociationValid(getOwner(), proposedNewValue, iConstraint());
return validityConsent.isVetoed()
- ? Optional.of(InteractionVeto.invalid(validityConsent))
- : Optional.empty();
-
+ ? Optional.of(InteractionVeto.invalid(validityConsent))
+ : Optional.empty();
} catch (final Exception ex) {
-
log.warn(ex.getLocalizedMessage(), ex);
return Optional.of(InteractionVeto.invalid(new Veto("failure during validity evaluation")));
-
}
}
@@ -132,9 +122,8 @@ public Optional modifyProperty(final @Nullable ManagedObject ne
private ManagedObject reassessPropertyValue() {
var property = getProperty();
var owner = getOwner();
-
- return property.isVisible(owner, InteractionInitiatedBy.FRAMEWORK, getWhere()).isAllowed()
- && property.isVisible(owner, InteractionInitiatedBy.USER, getWhere()).isAllowed()
+ return property.isVisible(owner, iConstraint().withInitiatedBy(InteractionInitiatedBy.FRAMEWORK)).isAllowed() //TODO strange API
+ && property.isVisible(owner, iConstraint()).isAllowed()
? property.get(owner, InteractionInitiatedBy.USER)
: ManagedObject.empty(property.getElementType());
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index 6a9d0286ea3..41a067c03d5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -28,6 +28,7 @@
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.Identifier;
+import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.binding.Bindable;
import org.apache.causeway.commons.binding.Observable;
import org.apache.causeway.commons.collections.Can;
@@ -41,7 +42,9 @@
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.consent.InteractionResult;
import org.apache.causeway.core.metamodel.consent.Veto;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
+import org.apache.causeway.core.metamodel.interactions.WhatViewer;
import org.apache.causeway.core.metamodel.interactions.managed._BindingUtil.TargetFormat;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.ManagedObjects;
@@ -182,11 +185,12 @@ public Observable getObservableParamValidation(final int paramNr) {
*/
public String validateImmediately(final int paramIndex) {
var actionInteractionHead = actionInteractionHead();
+ var iConstraint = new InteractionConstraint(WhatViewer.invalid(), InteractionInitiatedBy.USER, Where.NOT_SPECIFIED);
return actionInteractionHead.getMetaModel().getParameterByIndex(paramIndex)
.isValid(
actionInteractionHead.interactionHead(),
getParamValues(),
- InteractionInitiatedBy.USER)
+ iConstraint)
.getReasonAsString()
.orElse(null);
}
@@ -220,16 +224,19 @@ public MultiselectChoices getMultiselectChoices() {
/** validates all, the action and each individual parameter */
public Consent validateParameterSet() {
- return act().isArgumentSetValid(interactionHead(), this.getParamValues(), InteractionInitiatedBy.USER);
+ var iConstraint = new InteractionConstraint(WhatViewer.invalid(), InteractionInitiatedBy.USER, Where.NOT_SPECIFIED);
+ return act().isArgumentSetValid(interactionHead(), this.getParamValues(), iConstraint);
}
public Consent validateParameterSetForAction() {
- return act().isArgumentSetValidForAction(interactionHead(), this.getParamValues(), InteractionInitiatedBy.USER);
+ var iConstraint = new InteractionConstraint(WhatViewer.invalid(), InteractionInitiatedBy.USER, Where.NOT_SPECIFIED);
+ return act().isArgumentSetValidForAction(interactionHead(), this.getParamValues(), iConstraint);
}
public Can validateParameterSetForParameters() {
+ var iConstraint = new InteractionConstraint(WhatViewer.invalid(), InteractionInitiatedBy.USER, Where.NOT_SPECIFIED);
return act()
- .isArgumentSetValidForParameters(interactionHead(), this.getParamValues(), InteractionInitiatedBy.USER)
+ .isArgumentSetValidForParameters(interactionHead(), this.getParamValues(), iConstraint)
.stream()
.map(InteractionResult::createConsent)
.collect(Can.toCan());
@@ -411,16 +418,18 @@ private ParameterModel(
bindableParamValueDirtyFlag().setValue(true); // set dirty whenever an update event happens
});
+ var iConstraint = new InteractionConstraint(WhatViewer.invalid(), InteractionInitiatedBy.USER, Where.NOT_SPECIFIED);
+
// has either autoComplete, choices, or none
this.observableParamChoices = metaModel().hasAutoComplete()
? _Observables.lazy(()->
metaModel().getAutoComplete(
negotiationModel(),
bindableParamSearchArgument().getValue(),
- InteractionInitiatedBy.USER))
+ iConstraint.initiatedBy()))
: metaModel().hasChoices()
? _Observables.lazy(()->
- getMetaModel().getChoices(negotiationModel(), InteractionInitiatedBy.USER))
+ getMetaModel().getChoices(negotiationModel(), iConstraint.initiatedBy()))
: _Observables.lazy(Can::empty);
// if has autoComplete, then activate the search argument
@@ -436,16 +445,18 @@ private ParameterModel(
? negotiationModel().validateImmediately(paramIndex)
: (String)null);
+
+
this.observableVisibilityConsent = _Observables.lazy(()->
metaModel().isVisible(
negotiationModel().interactionHead(),
negotiationModel().getParamValues(),
- InteractionInitiatedBy.USER));
+ iConstraint));
this.observableUsabilityConsent = _Observables.lazy(()->
metaModel().isUsable(
negotiationModel().interactionHead(),
negotiationModel().getParamValues(),
- InteractionInitiatedBy.USER));
+ iConstraint));
// value types should have associated rederers via value semantics
this.observableParamAsTitle = _BindingUtil
@@ -538,10 +549,12 @@ public Observable> getChoices() {
@Override
public Optional checkUsability(@NonNull final Can params) {
+ var iConstraint = new InteractionConstraint(WhatViewer.invalid(), InteractionInitiatedBy.USER, Where.NOT_SPECIFIED);
+
try {
var usabilityConsent =
getMetaModel()
- .isUsable(negotiationModel().interactionHead(), params, InteractionInitiatedBy.USER);
+ .isUsable(negotiationModel().interactionHead(), params, iConstraint);
return usabilityConsent.isVetoed()
? Optional.of(InteractionVeto.readonly(usabilityConsent))
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PropertyInteraction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PropertyInteraction.java
index 097593bb387..d02d34a68a9 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PropertyInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PropertyInteraction.java
@@ -24,7 +24,7 @@
import org.jspecify.annotations.NonNull;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.object.ManagedObject;
public record PropertyInteraction(
@@ -34,9 +34,9 @@ public record PropertyInteraction(
public static final PropertyInteraction start(
final @NonNull ManagedObject owner,
final @NonNull String memberId,
- final @NonNull Where where) {
+ final @NonNull InteractionConstraint iConstraint) {
- var managedProperty = ManagedProperty.lookupProperty(owner, memberId, where);
+ var managedProperty = ManagedProperty.lookupProperty(owner, memberId, iConstraint);
final InteractionRailway railway = managedProperty.isPresent()
? InteractionRailway.success(managedProperty.get())
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ActionUsabilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ActionUsabilityContext.java
index 6780cbff485..b4464a0575e 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ActionUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ActionUsabilityContext.java
@@ -19,11 +19,10 @@
package org.apache.causeway.core.metamodel.interactions.use;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.ActionUsabilityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -39,8 +38,7 @@ public record ActionUsabilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy,
ObjectAction objectAction
)
@@ -50,12 +48,9 @@ public ActionUsabilityContext(
final InteractionHead head,
final ObjectAction objectAction,
final Identifier id,
- final InteractionInitiatedBy initiatedBy,
- final Where where,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
- this(InteractionContextType.ACTION_USABLE,
- head, id, initiatedBy, where, renderPolicy,
- objectAction);
+ this(InteractionContextType.ACTION_USABLE, head, id, iConstraint, renderPolicy, objectAction);
}
@Override
@@ -66,6 +61,7 @@ public ActionUsabilityEvent createInteractionEvent() {
@Override
public ActionVisibilityContext asVisibilityContext() {
return new ActionVisibilityContext(head(), objectAction(), identifier(),
- initiatedBy(), where(), renderPolicy());
+ iConstraint, renderPolicy());
}
+
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/CollectionUsabilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/CollectionUsabilityContext.java
index d494fefb1de..4246dcf59f5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/CollectionUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/CollectionUsabilityContext.java
@@ -19,10 +19,9 @@
package org.apache.causeway.core.metamodel.interactions.use;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.CollectionUsabilityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -36,19 +35,17 @@ public record CollectionUsabilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy)
implements UsabilityContext {
public CollectionUsabilityContext(
final InteractionHead head,
final Identifier identifier,
- final InteractionInitiatedBy initiatedBy,
- final Where where,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
this(InteractionContextType.COLLECTION_USABLE,
- head, identifier, initiatedBy, where, renderPolicy);
+ head, identifier, iConstraint, renderPolicy);
}
@Override
@@ -59,6 +56,6 @@ public CollectionUsabilityEvent createInteractionEvent() {
@Override
public CollectionVisibilityContext asVisibilityContext() {
return new CollectionVisibilityContext(head(), identifier(),
- initiatedBy(), where(), renderPolicy());
+ iConstraint(), renderPolicy());
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ParamUsabilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ParamUsabilityContext.java
index a28348cbb85..3b7ed73d764 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ParamUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/ParamUsabilityContext.java
@@ -19,13 +19,12 @@
package org.apache.causeway.core.metamodel.interactions.use;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.events.ActionArgumentUsabilityEvent;
import org.apache.causeway.applib.services.wrapper.events.ActionArgumentEvent;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -42,8 +41,7 @@ public record ParamUsabilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy,
ObjectAction objectAction,
Can args,
@@ -56,11 +54,11 @@ public ParamUsabilityContext(
final Identifier id,
final Can args,
final int position,
- final InteractionInitiatedBy initiatedBy,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
this(InteractionContextType.ACTION_PARAMETER_USABLE,
- head, id, initiatedBy, Where.OBJECT_FORMS, renderPolicy,
+ head, id, iConstraint, renderPolicy,
objectAction, args, position);
}
@@ -76,7 +74,7 @@ public ActionArgumentUsabilityEvent createInteractionEvent() {
@Override
public ParamVisibilityContext asVisibilityContext() {
return new ParamVisibilityContext(head(), objectAction(), identifier(),
- args, position, initiatedBy(), renderPolicy());
+ args, position, iConstraint, renderPolicy());
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/PropertyUsabilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/PropertyUsabilityContext.java
index 8ab024f0e05..4e0d79e80a3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/PropertyUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/use/PropertyUsabilityContext.java
@@ -19,10 +19,9 @@
package org.apache.causeway.core.metamodel.interactions.use;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.PropertyUsabilityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -37,19 +36,17 @@ public record PropertyUsabilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy)
implements UsabilityContext {
public PropertyUsabilityContext(
final InteractionHead head,
final Identifier identifier,
- final InteractionInitiatedBy initiatedBy,
- final Where where,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
this(InteractionContextType.PROPERTY_USABLE,
- head, identifier, initiatedBy, where, renderPolicy);
+ head, identifier, iConstraint, renderPolicy);
}
@Override
@@ -60,6 +57,6 @@ public PropertyUsabilityEvent createInteractionEvent() {
@Override
public PropertyVisibilityContext asVisibilityContext() {
return new PropertyVisibilityContext(head(), identifier(),
- initiatedBy(), where(), renderPolicy());
+ iConstraint(), renderPolicy());
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ActionValidityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ActionValidityContext.java
index 70ef933bf6b..e160fc2f516 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ActionValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ActionValidityContext.java
@@ -24,8 +24,8 @@
import org.apache.causeway.applib.services.wrapper.events.ActionInvocationEvent;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -41,7 +41,7 @@ public record ActionValidityContext(
InteractionHead head,
Identifier identifier,
Supplier friendlyNameProvider,
- InteractionInitiatedBy initiatedBy,
+ InteractionConstraint iConstraint,
ObjectAction objectAction,
Can args
) implements ValidityContext, ActionInteractionContext {
@@ -51,11 +51,10 @@ public ActionValidityContext(
final ObjectAction objectAction,
final Identifier id,
final Can args,
- final InteractionInitiatedBy initiatedBy) {
+ final InteractionConstraint iConstraint) {
this(InteractionContextType.ACTION_INVOKE,
- head, id, ()->objectAction.getFriendlyName(head::target), initiatedBy,
- objectAction, args);
+ head, id, ()->objectAction.getFriendlyName(head::target), iConstraint, objectAction, args);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ObjectValidityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ObjectValidityContext.java
index 9fafe3e4c07..38885e292d1 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ObjectValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ObjectValidityContext.java
@@ -23,7 +23,7 @@
import org.apache.causeway.applib.Identifier;
import org.apache.causeway.applib.services.wrapper.events.ObjectValidityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.ProposedHolder;
@@ -39,18 +39,18 @@ public record ObjectValidityContext(
InteractionHead head,
Identifier identifier,
Supplier friendlyNameProvider,
- InteractionInitiatedBy initiatedBy
+ InteractionConstraint iConstraint
) implements ValidityContext, ProposedHolder {
public ObjectValidityContext(
final ManagedObject targetAdapter,
final Identifier identifier,
- final InteractionInitiatedBy initiatedBy) {
+ final InteractionConstraint iConstraint) {
this(InteractionContextType.OBJECT_VALIDATE,
InteractionHead.regular(targetAdapter),
identifier,
()->targetAdapter.objSpec().getSingularName(),
- initiatedBy);
+ iConstraint);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ParamValidityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ParamValidityContext.java
index 98355ffb03a..ea68a7cce09 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ParamValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ParamValidityContext.java
@@ -24,8 +24,8 @@
import org.apache.causeway.applib.services.wrapper.events.ActionArgumentEvent;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.ProposedHolder;
@@ -42,7 +42,7 @@ public record ParamValidityContext(
InteractionHead head,
Identifier identifier,
Supplier friendlyNameProvider,
- InteractionInitiatedBy initiatedBy,
+ InteractionConstraint iConstraint,
ObjectAction objectAction,
ManagedObject proposed,
Can args,
@@ -54,11 +54,11 @@ public ParamValidityContext(
final Identifier id,
final Can args,
final int position,
- final InteractionInitiatedBy initiatedBy) {
+ final InteractionConstraint iConstraint) {
this(InteractionContextType.ACTION_PROPOSED_ARGUMENT,
head, id,
()->objectAction.getParameters().getElseFail(position).getFriendlyName(head::target),
- initiatedBy,
+ iConstraint,
objectAction,
args.getElseFail(position),
args,
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/PropertyModifyContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/PropertyModifyContext.java
index 4e2b9e80c68..7661cb25ff2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/PropertyModifyContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/PropertyModifyContext.java
@@ -23,7 +23,7 @@
import org.apache.causeway.applib.Identifier;
import org.apache.causeway.applib.services.wrapper.events.PropertyModifyEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.ProposedHolder;
@@ -39,7 +39,7 @@ public record PropertyModifyContext(
InteractionHead head,
Identifier identifier,
Supplier friendlyNameProvider,
- InteractionInitiatedBy initiatedBy,
+ InteractionConstraint iConstraint,
ManagedObject proposed) implements ValidityContext, ProposedHolder {
public PropertyModifyContext(
@@ -47,10 +47,9 @@ public PropertyModifyContext(
final Identifier id,
final ManagedObject proposed,
final Supplier friendlyMemberNameProvider,
- final InteractionInitiatedBy initiatedBy) {
+ final InteractionConstraint iConstraint) {
this(InteractionContextType.PROPERTY_MODIFY,
- head, id, friendlyMemberNameProvider, initiatedBy,
- proposed);
+ head, id, friendlyMemberNameProvider, iConstraint, proposed);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ValidityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ValidityContext.java
index 04c1610c9df..af8dac64ebf 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/val/ValidityContext.java
@@ -20,7 +20,6 @@
import java.util.function.Supplier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.ValidityEvent;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionEventSupplier;
@@ -35,9 +34,4 @@ default String friendlyName() {
return friendlyNameProvider().get();
}
- @Override
- default Where where() {
- return Where.NOT_SPECIFIED;
- }
-
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ActionVisibilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ActionVisibilityContext.java
index f9415271a89..68752942c12 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ActionVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ActionVisibilityContext.java
@@ -18,12 +18,13 @@
*/
package org.apache.causeway.core.metamodel.interactions.vis;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.ActionVisibilityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -38,22 +39,29 @@ public record ActionVisibilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy,
ObjectAction objectAction)
implements VisibilityContext, ActionInteractionContext {
+ public ActionVisibilityContext(
+ final @NonNull ObjectAction action,
+ final @NonNull VisibilityContext vc) {
+ this(InteractionContextType.ACTION_VISIBLE,
+ vc.head(),
+ action.getFeatureIdentifier(),
+ vc.iConstraint(),
+ vc.renderPolicy(),
+ action);
+ }
+
public ActionVisibilityContext(
final InteractionHead head,
final ObjectAction objectAction,
final Identifier identifier,
- final InteractionInitiatedBy initiatedBy,
- final Where where,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
- this(InteractionContextType.ACTION_VISIBLE,
- head, identifier, initiatedBy, where, renderPolicy,
- objectAction);
+ this(InteractionContextType.ACTION_VISIBLE, head, identifier, iConstraint, renderPolicy, objectAction);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/CollectionVisibilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/CollectionVisibilityContext.java
index 4ee46ff2bec..0e11526e3a6 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/CollectionVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/CollectionVisibilityContext.java
@@ -19,10 +19,9 @@
package org.apache.causeway.core.metamodel.interactions.vis;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.CollectionVisibilityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -36,19 +35,30 @@ public record CollectionVisibilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy)
implements VisibilityContext {
+// public CollectionVisibilityContext(
+// final @NonNull OneToManyAssociation collection,
+// final @NonNull VisibilityContext vc) {
+// this(InteractionContextType.COLLECTION_VISIBLE,
+// vc.head(),
+// collection.getFeatureIdentifier(),
+// vc.initiatedBy(),
+// vc.where(),
+// vc.whatViewer(),
+// vc.renderPolicy(),
+// collection);
+// }
+
public CollectionVisibilityContext(
final InteractionHead head,
final Identifier identifierAdapter,
- final InteractionInitiatedBy initiatedBy,
- final Where where,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
this(InteractionContextType.COLLECTION_VISIBLE,
- head, identifierAdapter, initiatedBy, where, renderPolicy);
+ head, identifierAdapter, iConstraint, renderPolicy);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ObjectVisibilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ObjectVisibilityContext.java
index 4f542b7b043..1e267378ff3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ObjectVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ObjectVisibilityContext.java
@@ -19,13 +19,11 @@
package org.apache.causeway.core.metamodel.interactions.vis;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.ObjectVisibilityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
-import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
import org.apache.causeway.core.metamodel.interactions.ProposedHolder;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -39,8 +37,7 @@ public record ObjectVisibilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy)
implements VisibilityContext, ProposedHolder {
@@ -51,14 +48,12 @@ public record ObjectVisibilityContext(
*/
public static ObjectVisibilityContext createForRegular(
final ManagedObject domainObject,
- final InteractionInitiatedBy initiatedBy,
- final Where where) {
+ final InteractionConstraint iConstraint) {
return new ObjectVisibilityContext(
InteractionHead.regular(domainObject),
domainObject.objSpec().getFeatureIdentifier(),
- initiatedBy,
- where,
- InteractionUtils.renderPolicy(domainObject));
+ iConstraint,
+ RenderPolicy.forNonActionParam(domainObject));
}
// -- CONSTRUCTION
@@ -66,11 +61,10 @@ public static ObjectVisibilityContext createForRegular(
public ObjectVisibilityContext(
final InteractionHead head,
final Identifier identifier,
- final InteractionInitiatedBy initiatedBy,
- final Where where,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
this(InteractionContextType.OBJECT_VISIBILITY,
- head, identifier, initiatedBy, where, renderPolicy);
+ head, identifier, iConstraint, renderPolicy);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ParamVisibilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ParamVisibilityContext.java
index b09699b922b..4277f71be8c 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ParamVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/ParamVisibilityContext.java
@@ -19,13 +19,12 @@
package org.apache.causeway.core.metamodel.interactions.vis;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.events.ActionArgumentVisibilityEvent;
import org.apache.causeway.applib.services.wrapper.events.ActionArgumentEvent;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -41,8 +40,7 @@ public record ParamVisibilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy,
ObjectAction objectAction,
Can args,
@@ -55,11 +53,11 @@ public ParamVisibilityContext(
final Identifier id,
final Can args,
final int position,
- final InteractionInitiatedBy initiatedBy,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
this(InteractionContextType.ACTION_PARAMETER_VISIBLE,
- head, id, initiatedBy, Where.OBJECT_FORMS, renderPolicy,
+ head, id, iConstraint, renderPolicy,
objectAction, args, position);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/PropertyVisibilityContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/PropertyVisibilityContext.java
index 0fad557d06e..03066ef691b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/PropertyVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/vis/PropertyVisibilityContext.java
@@ -19,10 +19,9 @@
package org.apache.causeway.core.metamodel.interactions.vis;
import org.apache.causeway.applib.Identifier;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.wrapper.events.PropertyVisibilityEvent;
import org.apache.causeway.core.metamodel.consent.InteractionContextType;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -36,20 +35,18 @@ public record PropertyVisibilityContext(
InteractionContextType interactionType,
InteractionHead head,
Identifier identifier,
- InteractionInitiatedBy initiatedBy,
- Where where,
+ InteractionConstraint iConstraint,
RenderPolicy renderPolicy
) implements VisibilityContext {
public PropertyVisibilityContext(
final InteractionHead head,
final Identifier identifier,
- final InteractionInitiatedBy initiatedBy,
- final Where where,
+ final InteractionConstraint iConstraint,
final RenderPolicy renderPolicy) {
this(InteractionContextType.PROPERTY_VISIBLE,
- head, identifier, initiatedBy, where, renderPolicy);
+ head, identifier, iConstraint, renderPolicy);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java
index 42d581c4f87..41c6cec24a2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java
@@ -44,7 +44,7 @@
import org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet;
import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet;
import org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet;
import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
import org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
@@ -299,7 +299,7 @@ private void setHiddenIfAny(
final HasHidden hasHidden,
final FacetHolder facetHolder) {
- var hiddenFacet = facetHolder.getFacet(HiddenFacet.class);
+ var hiddenFacet = facetHolder.getFacet(HiddenFacetForLayout.class);
if (isNonFallback(hiddenFacet)) {
final Where where = hiddenFacet.where();
if(where != null) {
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 4a27cffc8c7..7f5f600200b 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
@@ -25,7 +25,9 @@
import org.apache.causeway.commons.internal.collections._Arrays;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
+import org.apache.causeway.core.metamodel.interactions.WhatViewer;
import org.apache.causeway.core.metamodel.interactions.vis.ObjectVisibilityContext;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
@@ -90,19 +92,16 @@ public static boolean isVisible(
final ManagedObject adapter,
final InteractionInitiatedBy interactionInitiatedBy) {
- if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)) {
- // a choices list could include a null (eg example in ToDoItems#choices1Categorized()); want to show as "visible"
+ if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter))
+ // a choices list could include a null (eg example in ToDoItems#choices1Categorized()); want to show as "visible"
return true;
- }
var spec = adapter.objSpec();
if(spec.isEntity()) {
- if(MmEntityUtils.getEntityState(adapter).isTransientOrRemoved()) {
- return false;
- }
- }
- if(!interactionInitiatedBy.isUser()) {
- return true;
+ if(MmEntityUtils.getEntityState(adapter).isTransientOrRemoved())
+ return false;
}
+ if(!interactionInitiatedBy.isUser())
+ return true;
var visibilityContext = createVisibleInteractionContext(
adapter,
InteractionInitiatedBy.USER,
@@ -117,8 +116,10 @@ private static VisibilityContext createVisibleInteractionContext(
final InteractionInitiatedBy interactionInitiatedBy,
final Where where) {
+ var iConstraint = new InteractionConstraint(WhatViewer.invalid(), interactionInitiatedBy, where);
+
return ObjectVisibilityContext
- .createForRegular(objectAdapter, interactionInitiatedBy, where);
+ .createForRegular(objectAdapter, iConstraint);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacet.java
index b847f3f8671..c0eb0d87559 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacet.java
@@ -18,12 +18,12 @@
*/
package org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.Identifier;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor;
import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
import org.apache.causeway.core.metamodel.interactions.vis.ActionVisibilityContext;
@@ -34,14 +34,12 @@
import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
-import org.jspecify.annotations.NonNull;
-
/**
- * Optionally hide or disable an object, property, collection or action
+ * Optionally hides or disables an object, property, collection or action
* depending on the authorization.
*/
public interface AuthorizationFacet
-extends Facet, HidingInteractionAdvisor, DisablingInteractionAdvisor {
+extends HidingInteractionAdvisor, DisablingInteractionAdvisor {
public static boolean hidesProperty(
final @NonNull OneToOneAssociation property,
@@ -52,8 +50,7 @@ public static boolean hidesProperty(
new PropertyVisibilityContext(
vc.head(),
property.getFeatureIdentifier(),
- vc.initiatedBy(),
- vc.where(),
+ vc.iConstraint(),
vc.renderPolicy())) != null)
.orElse(false);
}
@@ -67,8 +64,7 @@ public static boolean hidesCollection(
new CollectionVisibilityContext(
vc.head(),
collection.getFeatureIdentifier(),
- vc.initiatedBy(),
- vc.where(),
+ vc.iConstraint(),
vc.renderPolicy())) != null)
.orElse(false);
}
@@ -83,8 +79,7 @@ public static boolean hidesAction(
vc.head(),
action,
action.getFeatureIdentifier(),
- vc.initiatedBy(),
- vc.where(),
+ vc.iConstraint(),
vc.renderPolicy())) != null)
.orElse(false);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetAbstract.java
deleted file mode 100644
index 3754ad7cf3c..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetAbstract.java
+++ /dev/null
@@ -1,92 +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.postprocessors.allbutparam.authorization;
-
-import java.util.Optional;
-
-import org.apache.causeway.core.metamodel.consent.Consent.VetoReason;
-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.interactions.use.UsabilityContext;
-import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
-import org.apache.causeway.core.security.authorization.manager.AuthorizationManager;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public abstract class AuthorizationFacetAbstract
-extends FacetAbstract
-implements AuthorizationFacet {
-
- private static final Class extends Facet> type() {
- return AuthorizationFacet.class;
- }
-
- private final AuthorizationManager authorizationManager;
-
- public AuthorizationFacetAbstract(
- final FacetHolder holder) {
- super(type(), holder);
- this.authorizationManager = getAuthorizationManager();
- }
-
- @Override
- public String hides(final VisibilityContext ic) {
-
- if(ic.head().owner().objSpec().isValue()) {
- return null; // never hide value-types
- }
-
- var hides = authorizationManager
- .isVisible(
- getInteractionService().currentInteractionContextElseFail(),
- ic.identifier())
- ? null
- : "Not authorized to view";
-
- if(hides!=null && log.isDebugEnabled()) {
- log.debug("hides[{}] -> {}", ic.identifier(), hides);
- }
-
- return hides;
- }
-
- @Override
- public Optional disables(final UsabilityContext ic) {
-
- if(ic.head().owner().objSpec().isValue()) {
- return Optional.empty(); // never disable value-types
- }
-
- var disables = authorizationManager
- .isUsable(
- getInteractionService().currentInteractionContextElseFail(),
- ic.identifier())
- ? null
- : AuthorizationFacet.formatNotAuthorizedToEdit(ic.identifier(), getMetaModelContext());
-
- if(disables!=null && log.isDebugEnabled()) {
- log.debug("disables[{}] -> {}", ic.identifier(), disables);
- }
-
- return Optional.ofNullable(disables).map(VetoReason::unauthorized);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetImpl.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetImpl.java
index fc82c0c9ba6..a79efd196b6 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetImpl.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetImpl.java
@@ -18,12 +18,66 @@
*/
package org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization;
+import java.util.Optional;
+
+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;
+import org.apache.causeway.core.metamodel.interactions.use.UsabilityContext;
+import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
+import org.apache.causeway.core.security.authorization.manager.AuthorizationManager;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public record AuthorizationFacetImpl(
+ AuthorizationManager authorizationManager,
+ FacetHolder facetHolder
+ ) implements AuthorizationFacet {
+
+ @Override public Class extends Facet> facetType() { return AuthorizationFacet.class; }
+ @Override public Precedence precedence() { return Precedence.DEFAULT; }
+
+ @Override
+ public String hides(final VisibilityContext ic) {
+
+ if(ic.head().owner().objSpec().isValue()) {
+ return null; // never hide value-types
+ }
+
+ var hides = authorizationManager
+ .isVisible(
+ facetHolder.getInteractionService().currentInteractionContextElseFail(),
+ ic.identifier())
+ ? null
+ : "Not authorized to view";
+
+ if(hides!=null && log.isDebugEnabled()) {
+ log.debug("hides[{}] -> {}", ic.identifier(), hides);
+ }
+
+ return hides;
+ }
+
+ @Override
+ public Optional disables(final UsabilityContext ic) {
+
+ if(ic.head().owner().objSpec().isValue()) {
+ return Optional.empty(); // never disable value-types
+ }
+
+ var disables = authorizationManager
+ .isUsable(
+ facetHolder.getInteractionService().currentInteractionContextElseFail(),
+ ic.identifier())
+ ? null
+ : AuthorizationFacet.formatNotAuthorizedToEdit(ic.identifier(), facetHolder.getMetaModelContext());
-public class AuthorizationFacetImpl extends AuthorizationFacetAbstract {
+ if(disables!=null && log.isDebugEnabled()) {
+ log.debug("disables[{}] -> {}", ic.identifier(), disables);
+ }
- public AuthorizationFacetImpl(final FacetHolder holder) {
- super(holder);
+ return Optional.ofNullable(disables).map(VetoReason::unauthorized);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java
index 389dcb4495b..355b1904c8d 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java
@@ -57,7 +57,7 @@ public void postProcessCollection(final ObjectSpecification objectSpecification,
}
private static void addFacet(final FacetHolder facetHolder) {
- facetHolder.addFacet(new AuthorizationFacetImpl(facetHolder));
+ facetHolder.addFacet(new AuthorizationFacetImpl(facetHolder.getAuthorizationManager(), facetHolder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenType.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/HiddenFacetForNavigationFromHiddenType.java
similarity index 67%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenType.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/HiddenFacetForNavigationFromHiddenType.java
index cd6874af027..d5e92b35b56 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenType.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/HiddenFacetForNavigationFromHiddenType.java
@@ -24,34 +24,28 @@
import org.apache.causeway.applib.Identifier;
import org.apache.causeway.commons.internal.assertions._Assert;
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.facets.members.navigation.NavigationFacet;
-import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet;
+import org.apache.causeway.core.metamodel.facets.members.navigation.HiddenFacetForNavigation;
+import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenFacetForNoMembersAuthorized;
import org.apache.causeway.core.metamodel.interactions.vis.ObjectVisibilityContext;
import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-public class NavigationFacetFromHiddenType
-extends FacetAbstract
-implements
- NavigationFacet {
+public record HiddenFacetForNavigationFromHiddenType(
+ ObjectSpecification navigatedType,
+ FacetHolder facetHolder
+ ) implements HiddenFacetForNavigation {
- private final ObjectSpecification navigatedType;
+ public static Optional create(final ObjectSpecification navigatedType, final FacetHolder holder) {
+ return navigatedType.isValue()
+ ? Optional.empty() // don't create for value types (optimization, not strictly required)
+ : Optional.of(new HiddenFacetForNavigationFromHiddenType(navigatedType, holder));
+ }
- private static final Class extends Facet> type() {
- return NavigationFacet.class;
- }
-
- public static Optional create(final ObjectSpecification navigatedType, final FacetHolder holder) {
- return navigatedType.isValue()
- ? Optional.empty() // don't create for value types (optimization, not strictly required)
- : Optional.of(new NavigationFacetFromHiddenType(navigatedType, holder));
- }
+ @Override public Class extends Facet> facetType() { return HiddenFacetForNavigation.class; }
+ @Override public Precedence precedence() { return Precedence.DEFAULT; }
- private NavigationFacetFromHiddenType(final ObjectSpecification navigatedType, final FacetHolder holder) {
- super(type(), holder);
- this.navigatedType = navigatedType;
+ public HiddenFacetForNavigationFromHiddenType {
_Assert.assertTrue(navigatedType.isSingular(), ()->String.format(
"framework bug: elementType must not match any supported plural (collection) types, "
+ "nevertheless got %s", navigatedType));
@@ -59,17 +53,15 @@ private NavigationFacetFromHiddenType(final ObjectSpecification navigatedType, f
@Override
public String hides(final VisibilityContext ic) {
- var facet = navigatedType.getFacet(HiddenTypeFacet.class);
- if(facet == null) {
- // not expected to happen; this facet should only be installed for object members
+ var facet = navigatedType.getFacet(HiddenFacetForNoMembersAuthorized.class);
+ if(facet == null)
+ // not expected to happen; this facet should only be installed for object members
// that navigate to a class that has the HiddenTypeFacet
return null;
- }
var objVisibilityContext = new ObjectVisibilityContext(
ic.head(),
Identifier.classIdentifier(navigatedType.logicalType()),
- ic.initiatedBy(),
- ic.where(),
+ ic.iConstraint(),
ic.renderPolicy());
final String hides = facet.hides(objVisibilityContext);
return hides;
@@ -77,7 +69,7 @@ public String hides(final VisibilityContext ic) {
@Override
public void visitAttributes(final BiConsumer visitor) {
- super.visitAttributes(visitor);
+ HiddenFacetForNavigation.super.visitAttributes(visitor);
visitor.accept("navigatedType", navigatedType.logicalTypeName());
visitor.accept("navigatedTypeFqcn", navigatedType.getCorrespondingClass().getName());
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java
index 66bcc7ed094..e961f316e88 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java
@@ -23,7 +23,7 @@
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
-import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet;
+import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenFacetForNoMembersAuthorized;
import org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessorAbstract;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
@@ -32,7 +32,7 @@
import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
/**
- * Installs the {@link NavigationFacetFromHiddenType} on all of the
+ * Installs the {@link HiddenFacetForNavigationFromHiddenType} on all of the
* {@link ObjectMember}s of the {@link ObjectSpecification}.
*/
public class NavigationFacetFromHiddenTypePostProcessor extends MetaModelPostProcessorAbstract {
@@ -60,8 +60,8 @@ public void postProcessCollection(final ObjectSpecification objectSpecification,
// -- HELPER
private static void addFacetIfRequired(final FacetHolder facetHolder, final ObjectSpecification navigatedType) {
- if(navigatedType.containsNonFallbackFacet(HiddenTypeFacet.class)) {
- FacetUtil.addFacetIfPresent(NavigationFacetFromHiddenType.create(navigatedType, facetHolder));
+ if(navigatedType.containsNonFallbackFacet(HiddenFacetForNoMembersAuthorized.class)) {
+ FacetUtil.addFacetIfPresent(HiddenFacetForNavigationFromHiddenType.create(navigatedType, facetHolder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index d286c6f943a..06423d74062 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -51,7 +51,7 @@
import org.apache.causeway.core.metamodel.CausewayModuleCoreMetamodel;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.SingleIntValueFacet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
import org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
@@ -359,7 +359,7 @@ protected boolean exclude(final ObjectSpecification spec) {
}
protected boolean isHidden(final ObjectSpecification spec) {
- return HiddenFacet.isAlwaysHidden(spec);
+ return HiddenFacetForLayout.isAlwaysHidden(spec);
}
protected boolean isBuiltIn(final ObjectSpecification spec) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/DomainMemberDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/DomainMemberDefault.java
index 1042dfc5284..e69ab7abc55 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/DomainMemberDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/DomainMemberDefault.java
@@ -37,7 +37,7 @@
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facets.ImperativeFacet;
import org.apache.causeway.core.metamodel.facets.actions.validate.ActionValidationFacet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet;
import org.apache.causeway.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
import org.apache.causeway.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
@@ -164,7 +164,7 @@ public String getMixin() {
@XmlElement @Override
public String getHidden() {
- return interpret(HiddenFacet.class);
+ return interpret(HiddenFacetForLayout.class);
}
@XmlElement @Override
@@ -271,7 +271,7 @@ private static String interpretFacet(final Facet facet) {
}
if (facet instanceof ImperativeFacet) {
ImperativeFacet imperativeFacet = (ImperativeFacet) facet;
- return imperativeFacet.getMethods().getFirstElseFail().getName();
+ return imperativeFacet.methods().getFirstElseFail().getName();
}
final String name = facet.getClass().getSimpleName();
if (ignore(name)) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
index d2ecdd8ca1a..5ef09db0245 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
@@ -50,7 +50,7 @@
import org.apache.causeway.core.metamodel.facetapi.HasFacetHolder;
import org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacet;
import org.apache.causeway.core.metamodel.facets.all.help.HelpFacet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.facets.all.i8n.noun.HasNoun;
import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText;
import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
@@ -391,7 +391,7 @@ default boolean isValueOrIsParented() {
boolean isImmutable();
/**
- * Whether has the {@link HiddenFacet}
+ * Whether has the {@link HiddenFacetForLayout}
*/
boolean isHidden();
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 2729dd71e34..4465e8ad383 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
@@ -25,7 +25,6 @@
import org.jspecify.annotations.NonNull;
import org.apache.causeway.applib.annotation.SemanticsOf;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.collections.CanVector;
import org.apache.causeway.core.metamodel.consent.Consent;
@@ -33,6 +32,7 @@
import org.apache.causeway.core.metamodel.consent.InteractionResultSet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ActionScope;
@@ -55,11 +55,11 @@ public interface HasObjectAction extends ObjectAction {
@Override default boolean isAlwaysHidden() {
return getObjectAction().isAlwaysHidden();
}
- @Override default Consent isVisible(final ManagedObject target, final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
- return getObjectAction().isVisible(target, interactionInitiatedBy, where);
+ @Override default Consent isVisible(final ManagedObject target, final InteractionConstraint iConstraint) {
+ return getObjectAction().isVisible(target, iConstraint);
}
- @Override default Consent isUsable(final ManagedObject target, final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
- return getObjectAction().isUsable(target, interactionInitiatedBy, where);
+ @Override default Consent isUsable(final ManagedObject target, final InteractionConstraint iConstraint) {
+ return getObjectAction().isUsable(target, iConstraint);
}
@Override default boolean isPropertyOrCollection() {
return getObjectAction().isPropertyOrCollection();
@@ -129,24 +129,25 @@ default FacetHolder getFacetHolder() {
return getObjectAction().hasReturn();
}
@Override default ManagedObject executeWithRuleChecking(final InteractionHead head, final Can parameters,
- final InteractionInitiatedBy interactionInitiatedBy, final Where where) throws AuthorizationException {
- return getObjectAction().executeWithRuleChecking(head, parameters, interactionInitiatedBy, where);
+ final InteractionConstraint iConstraint) throws AuthorizationException {
+ return getObjectAction().executeWithRuleChecking(head, parameters, iConstraint);
}
+ @Deprecated
@Override default ManagedObject execute(final InteractionHead head, final Can parameters,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return getObjectAction().execute(head, parameters, interactionInitiatedBy);
+ final InteractionConstraint iConstraint) {
+ return getObjectAction().execute(head, parameters, iConstraint);
}
@Override default Consent isArgumentSetValid(final InteractionHead head, final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return getObjectAction().isArgumentSetValid(head, proposedArguments, interactionInitiatedBy);
+ final InteractionConstraint iConstraint) {
+ return getObjectAction().isArgumentSetValid(head, proposedArguments, iConstraint);
}
@Override default InteractionResultSet isArgumentSetValidForParameters(final InteractionHead head,
- final Can proposedArguments, final InteractionInitiatedBy interactionInitiatedBy) {
- return getObjectAction().isArgumentSetValidForParameters(head, proposedArguments, interactionInitiatedBy);
+ final Can proposedArguments, final InteractionConstraint iConstraint) {
+ return getObjectAction().isArgumentSetValidForParameters(head, proposedArguments, iConstraint);
}
@Override default Consent isArgumentSetValidForAction(final InteractionHead head, final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return getObjectAction().isArgumentSetValidForAction(head, proposedArguments, interactionInitiatedBy);
+ final InteractionConstraint iConstraint) {
+ return getObjectAction().isArgumentSetValidForAction(head, proposedArguments, iConstraint);
}
@Override default InteractionHead interactionHead(@NonNull final ManagedObject actionOwner) {
return getObjectAction().interactionHead(actionOwner);
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 993c9537233..5fba36b85a8 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
@@ -43,12 +43,14 @@
import org.apache.causeway.core.metamodel.facets.WhereValueFacet;
import org.apache.causeway.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacet;
import org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet;
import org.apache.causeway.core.metamodel.facets.members.iconfa.FaLayersProvider;
import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet;
import org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
+import org.apache.causeway.core.metamodel.interactions.WhatViewer;
import org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.ManagedObjects;
@@ -103,8 +105,7 @@ default boolean isImmediateConfirmationRequired() {
ManagedObject executeWithRuleChecking(
InteractionHead head,
Can parameters,
- InteractionInitiatedBy interactionInitiatedBy,
- Where where) throws AuthorizationException;
+ InteractionConstraint iConstraint) throws AuthorizationException;
/**
* Invokes the action's method on the target object given the specified set
@@ -114,10 +115,11 @@ ManagedObject executeWithRuleChecking(
* When a mixin action invokes its underlying mixedIn action, then will be populated
* (so that the ActionDomainEvent can correctly provide the underlying mixin)
*/
+ @Deprecated //FIXME bad API
ManagedObject execute(
InteractionHead head,
Can parameters,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
// -- isArgumentSetValid, isArgumentSetValidForParameters, isArgumentSetValidForAction
@@ -136,7 +138,7 @@ ManagedObject execute(
Consent isArgumentSetValid(
InteractionHead head,
Can proposedArguments,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
/**
* Normally action validation is all performed by
@@ -154,7 +156,7 @@ Consent isArgumentSetValid(
InteractionResultSet isArgumentSetValidForParameters(
InteractionHead head,
Can proposedArguments,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
/**
* Normally action validation is all performed by
@@ -172,7 +174,7 @@ InteractionResultSet isArgumentSetValidForParameters(
Consent isArgumentSetValidForAction(
InteractionHead head,
Can proposedArguments,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
// -- INTERACTION HEAD
@@ -271,10 +273,9 @@ default PromptStyle getPromptStyle() {
// whereas for INLINE it would render a form with no fields
|| getParameterCount() == 0) {
if (promptStyle.isPresent()) {
- if (promptStyle.get().isDialogAny()) {
- // preserve dialog specialization
+ if (promptStyle.get().isDialogAny())
+ // preserve dialog specialization
return promptStyle.get();
- }
}
// fallback to generic dialog
return PromptStyle.DIALOG;
@@ -283,16 +284,13 @@ default PromptStyle getPromptStyle() {
var needsFallback = promptStyle.isEmpty()
|| promptStyle.get() == PromptStyle.AS_CONFIGURED;
- if(needsFallback) {
- // modal vs side-bar
- switch (getWicketViewerSettings().dialogMode()) {
- case SIDEBAR:
- return PromptStyle.DIALOG_SIDEBAR;
- case MODAL:
- default:
- return PromptStyle.DIALOG_MODAL;
- }
- }
+ if(needsFallback)
+ // modal vs side-bar
+ return switch (getWicketViewerSettings().dialogMode()) {
+ case SIDEBAR -> PromptStyle.DIALOG_SIDEBAR;
+ case MODAL -> PromptStyle.DIALOG_MODAL;
+ default -> PromptStyle.DIALOG_MODAL;
+ };
return promptStyle.get();
}
@@ -309,9 +307,8 @@ public static boolean returnsBlobOrClob(final ObjectAction objectAction) {
if (returnType != null) {
Class> cls = returnType.getCorrespondingClass();
if (Blob.class.isAssignableFrom(cls)
- || Clob.class.isAssignableFrom(cls)) {
- return true;
- }
+ || Clob.class.isAssignableFrom(cls))
+ return true;
}
return false;
}
@@ -320,18 +317,15 @@ public static boolean isDirectlyAssociatedWithAnyProperty(
final ObjectAction action) {
var layoutGroupFacet = action.getFacet(LayoutGroupFacet.class);
- if (layoutGroupFacet == null) {
- return false;
- }
+ if (layoutGroupFacet == null)
+ return false;
var layoutGroupId = layoutGroupFacet.getGroupId();
- if (_Strings.isNullOrEmpty(layoutGroupId)) {
- return false;
- }
+ if (_Strings.isNullOrEmpty(layoutGroupId))
+ return false;
var prop = action.getDeclaringType().getProperty(layoutGroupId, MixedIn.INCLUDED)
.orElse(null);
- if (prop == null) {
- return false;
- }
+ if (prop == null)
+ return false;
return true;
}
@@ -365,16 +359,16 @@ public static Optional cssClassFaFactoryFor(
* Returns a Stream of those to be rendered with the entity header panel.
*/
public static Stream streamTopBarActions(
- final ManagedObject adapter) {
+ final ManagedObject mo) {
- var spec = adapter.objSpec();
+ var spec = mo.objSpec();
return spec.streamRuntimeActions(MixedIn.INCLUDED)
- .filter(Predicates
+ .filter(Predicates
.isSharingAnyLayoutGroupOf(spec.streamAssociations(MixedIn.INCLUDED))
.negate())
- .filter(Predicates
- .dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE));
+ .filter(Predicates
+ .dynamicallyVisible(mo, new InteractionConstraint(WhatViewer.invalid(), InteractionInitiatedBy.USER, Where.ANYWHERE)));
}
public static Stream findForAssociation(
@@ -388,15 +382,13 @@ public static Stream findForAssociation(
public static PromptStyle promptStyleFor(final ObjectAction objectAction) {
PromptStyleFacet facet = objectAction.getFacet(PromptStyleFacet.class);
- if(facet == null) {
- // don't think this can occur, see PromptStyleFallback
+ if(facet == null)
+ // don't think this can occur, see PromptStyleFallback
return PromptStyle.INLINE;
- }
final PromptStyle promptStyle = facet.value();
- if(promptStyle == PromptStyle.AS_CONFIGURED) {
- // don't think this can occur, see PromptStyleConfiguration
+ if(promptStyle == PromptStyle.AS_CONFIGURED)
+ // don't think this can occur, see PromptStyleConfiguration
return PromptStyle.INLINE;
- }
return promptStyle;
}
@@ -436,13 +428,11 @@ public static Predicate isSameLayoutGroupAs(
return (final ObjectAction objectAction) -> {
var layoutGroupFacet = objectAction.getFacet(LayoutGroupFacet.class);
- if (layoutGroupFacet == null) {
- return false;
- }
+ if (layoutGroupFacet == null)
+ return false;
var layoutGroupId = layoutGroupFacet.getGroupId();
- if (_Strings.isNullOrEmpty(layoutGroupId)) {
- return false;
- }
+ if (_Strings.isNullOrEmpty(layoutGroupId))
+ return false;
return layoutGroupId.equals(memberId);
};
}
@@ -457,13 +447,11 @@ private static Predicate super ObjectAction> isSharingAnyLayoutGroupOf(
return (final ObjectAction objectAction) -> {
var layoutGroupFacet = objectAction.getFacet(LayoutGroupFacet.class);
- if (layoutGroupFacet == null) {
- return false;
- }
+ if (layoutGroupFacet == null)
+ return false;
var layoutGroupId = layoutGroupFacet.getGroupId();
- if (_Strings.isNullOrEmpty(layoutGroupId)) {
- return false;
- }
+ if (_Strings.isNullOrEmpty(layoutGroupId))
+ return false;
return associationIds.contains(layoutGroupId);
};
}
@@ -480,10 +468,10 @@ public static Predicate choicesFromAndHavingCollectionParameterFor
}
/**
- * Returns true if no {@link HiddenFacet} is found that vetoes visibility.
+ * Returns true if no {@link HiddenFacetForLayout} is found that vetoes visibility.
*
* However, whereHidden={@link Where#ALL_TABLES} is used as default
- * when no {@link HiddenFacet} is found.
+ * when no {@link HiddenFacetForLayout} is found.
*
* @see ObjectAssociation.Predicates#visibleAccordingToHiddenFacet(Where)
*
@@ -491,7 +479,7 @@ public static Predicate choicesFromAndHavingCollectionParameterFor
* however the current approach is more heap friendly
*/
public static Predicate visibleAccordingToHiddenFacet(final Where whereContext) {
- return (final ObjectAction act) -> act.lookupFacet(HiddenFacet.class)
+ return (final ObjectAction act) -> act.lookupFacet(HiddenFacetForLayout.class)
.map(WhereValueFacet.class::cast)
.map(WhereValueFacet::where)
// whereHidden=ALL_TABLES is the default when not specified otherwise
@@ -512,13 +500,11 @@ public HasChoicesFrom(final @NonNull ObjectAssociation objectAssociation) {
@Override
public boolean test(final ObjectAction objectAction) {
var choicesFromFacet = objectAction.getFacet(ChoicesFromFacet.class);
- if(choicesFromFacet == null) {
- return false;
- }
+ if(choicesFromFacet == null)
+ return false;
var choicesFromMemberName = choicesFromFacet.value();
- if (choicesFromMemberName == null) {
- return false;
- }
+ if (choicesFromMemberName == null)
+ return false;
var memberNameLowerCase = choicesFromMemberName.toLowerCase();
return Objects.equals(memberId, memberNameLowerCase);
}
@@ -540,11 +526,10 @@ public boolean test(final ObjectAction objectAction) {
private static Predicate dynamicallyVisible(
final ManagedObject target,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Where where) {
+ final InteractionConstraint iConstraint) {
return (final ObjectAction objectAction) -> {
- final Consent visible = objectAction.isVisible(target, interactionInitiatedBy, where);
+ final Consent visible = objectAction.isVisible(target, iConstraint);
return visible.isAllowed();
};
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectActionParameter.java
index 492396c7acf..ba8bc7faa24 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -21,6 +21,7 @@
import java.util.Optional;
import java.util.function.Predicate;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.annotation.Domain;
@@ -30,6 +31,7 @@
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
import org.apache.causeway.core.metamodel.interactions.val.ParamValidityContext;
@@ -38,7 +40,6 @@
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.util.Facets;
-import org.jspecify.annotations.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.experimental.UtilityClass;
@@ -109,7 +110,7 @@ ParamValidityContext createProposedArgumentInteractionContext(
InteractionHead head,
Can args,
int position,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
/**
* Whether there is an autoComplete provided (eg autoCompleteXxx supporting
@@ -203,7 +204,7 @@ default boolean reassessDefault(final ParameterNegotiationModel pendingArgs) {
Consent isVisible(
InteractionHead head,
Can pendingArgs,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
/**
* Whether this parameter is disabled given the entered previous arguments
@@ -214,7 +215,7 @@ Consent isVisible(
Consent isUsable(
InteractionHead head,
Can pendingArgs,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
/**
* Whether proposed value for this parameter is valid.
@@ -226,7 +227,7 @@ Consent isUsable(
Consent isValid(
InteractionHead head,
Can pendingArgs,
- InteractionInitiatedBy interactionInitiatedBy);
+ InteractionConstraint iConstraint);
@Domain.Exclude
@UtilityClass
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociation.java
index 55204ee56d3..e6562079b7c 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociation.java
@@ -29,7 +29,7 @@
import org.apache.causeway.commons.internal.functions._Predicates;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facets.WhereValueFacet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.util.Facets;
@@ -139,7 +139,7 @@ private Predicates(){}
public static Predicate staticallyVisible(final Where where) {
return assoc -> {
var b = assoc.streamFacets()
- .filter(facet -> facet instanceof HiddenFacet)
+ .filter(facet -> facet instanceof HiddenFacetForLayout)
.map(facet -> (WhereValueFacet) facet)
.anyMatch(wawF -> wawF.where().includes(where));
return !b;
@@ -147,10 +147,10 @@ public static Predicate staticallyVisible(final Where where)
}
/**
- * Returns true if no {@link HiddenFacet} is found that vetoes visibility.
+ * Returns true if no {@link HiddenFacetForLayout} is found that vetoes visibility.
*
* However, if it's a 1-to-Many, whereHidden={@link Where#ALL_TABLES} is used as default
- * when no {@link HiddenFacet} is found.
+ * when no {@link HiddenFacetForLayout} is found.
*
* @see ObjectAction.Predicates#visibleAccordingToHiddenFacet(Where)
*
@@ -158,7 +158,7 @@ public static Predicate staticallyVisible(final Where where)
* however the current approach is more heap friendly
*/
public static Predicate visibleAccordingToHiddenFacet(final Where whereContext) {
- return (final ObjectAssociation assoc) -> assoc.lookupFacet(HiddenFacet.class)
+ return (final ObjectAssociation assoc) -> assoc.lookupFacet(HiddenFacetForLayout.class)
.map(WhereValueFacet.class::cast)
.map(WhereValueFacet::where)
// in case it's a 1-to-Many, whereHidden=ALL_TABLES is the default when not specified otherwise
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
index d463c5c656d..8811b800088 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
@@ -35,10 +35,11 @@
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.facets.collections.sortedby.SortedByFacet;
import org.apache.causeway.core.metamodel.facets.object.paged.PagedFacet;
import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.MmSortUtils;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
@@ -53,16 +54,12 @@ public interface ObjectMember extends ObjectFeature {
* Returns the {@link ObjectSpecification} representing the class or interface
* that declares the member represented by this object.
*
- *
- * If the member is a regular member, declared on a class, then this returns that type.
- * But if the member is a mixin, then this will return the {@link ObjectSpecification} representing the mixin type.
- *
+ * If the member is a regular member, declared on a class, then this returns that type.
+ * But if the member is a mixin, then this will return the {@link ObjectSpecification} representing the mixin type.
*/
ObjectSpecification getDeclaringType();
- // /////////////////////////////////////////////////////////////
- // Name, Description, Help (convenience for facets)
- // /////////////////////////////////////////////////////////////
+ // -- Name, Description, Help (convenience for facets)
/**
* Return the help text for this member - the field or action - to
@@ -72,16 +69,13 @@ public interface ObjectMember extends ObjectFeature {
*/
String getHelp();
- // /////////////////////////////////////////////////////////////
- // Hidden (or visible)
- // /////////////////////////////////////////////////////////////
+ // -- Hidden (or visible)
/**
* When the member is always hidden.
*
- *
- * Determined as per the {@link HiddenFacet} being present and
- * {@link HiddenFacet#where()} returning {@link Where#ANYWHERE}.
+ *
Determined as per the {@link HiddenFacetForLayout} being present and
+ * {@link HiddenFacetForLayout#where()} returning {@link Where#ANYWHERE}.
*/
boolean isAlwaysHidden();
@@ -91,15 +85,13 @@ public interface ObjectMember extends ObjectFeature {
* may be null if just checking for authorization.
* @param interactionInitiatedBy
* @param where
+ * @param whatViewer
*/
Consent isVisible(
- final ManagedObject target,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Where where);
+ ManagedObject target,
+ InteractionConstraint iConstraint);
- // /////////////////////////////////////////////////////////////
- // Disabled (or enabled)
- // /////////////////////////////////////////////////////////////
+ // -- Disabled (or enabled)
/**
* Determines whether this member is usable (not disabled), represented as a
@@ -110,19 +102,15 @@ Consent isVisible(
* @param where
*/
Consent isUsable(
- final ManagedObject target,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Where where);
+ ManagedObject target,
+ InteractionConstraint iConstraint);
- // /////////////////////////////////////////////////////////////
- // isAssociation, isAction
- // /////////////////////////////////////////////////////////////
+ // -- PREDICATES
/**
* Whether this member represents a {@link ObjectAssociation}.
*
- *
- * If so, can be safely downcast to {@link ObjectAssociation}.
+ *
If so, can be safely downcast to {@link ObjectAssociation}.
*/
boolean isPropertyOrCollection();
default boolean isProperty() { return isOneToOneAssociation(); }
@@ -131,16 +119,14 @@ Consent isUsable(
/**
* Whether this member represents a {@link OneToManyAssociation}.
*
- *
- * If so, can be safely downcast to {@link OneToManyAssociation}.
+ *
If so, can be safely downcast to {@link OneToManyAssociation}.
*/
boolean isOneToManyAssociation();
/**
* Whether this member represents a {@link OneToOneAssociation}.
*
- *
- * If so, can be safely downcast to {@link OneToOneAssociation}.
+ *
If so, can be safely downcast to {@link OneToOneAssociation}.
*/
boolean isOneToOneAssociation();
@@ -166,24 +152,17 @@ default boolean isMixedIn() {
*/
boolean isExplicitlyAnnotated();
- // /////////////////////////////////////////////////////////////
- // Debugging
- // /////////////////////////////////////////////////////////////
+ // -- DEBUGGING
/**
* Thrown if the user is not authorized to access an action or any property/collection of an entity.
*
- *
- * For the former case, is thrown by
- * {@link ObjectAction#executeWithRuleChecking(org.apache.causeway.core.metamodel.interactions.InteractionHead, org.apache.causeway.commons.collections.Can, InteractionInitiatedBy, Where)}
- * when the action being executed is not visible or not usable for the specified session. One reason this
- * might occur if there was an attempt to construct a URL (eg a bookmarked action) and invoke in an unauthenticated session.
- *
- *
- *
- * For the latter case, is thrown by DomainObjectPage
- *
- *
+ * For the former case, is thrown by
+ * {@link ObjectAction#executeWithRuleChecking(org.apache.causeway.core.metamodel.interactions.InteractionHead, org.apache.causeway.commons.collections.Can, InteractionInitiatedBy, Where)}
+ * when the action being executed is not visible or not usable for the specified session. One reason this
+ * might occur if there was an attempt to construct a URL (eg a bookmarked action) and invoke in an unauthenticated session.
+ *
+ *
For the latter case, is thrown by DomainObjectPage
*/
class AuthorizationException extends RuntimeException {
private static final long serialVersionUID = 1L;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/OneToOneAssociation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/OneToOneAssociation.java
index 2573476ba1a..ca88a1d6612 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/OneToOneAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/OneToOneAssociation.java
@@ -19,8 +19,8 @@
package org.apache.causeway.core.metamodel.spec.feature;
import org.apache.causeway.core.metamodel.consent.Consent;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.object.ManagedObject;
/**
@@ -34,7 +34,7 @@ public interface OneToOneAssociation
MutableCurrentHolder {
/**
- * Initialise this field in the specified object with the specified
+ * Initialize this field in the specified object with the specified
* reference - this call should only affect the specified object, and not
* any related objects. It should also not be distributed. This is strictly
* for re-initialising the object and not specifying an association, which
@@ -47,9 +47,9 @@ public interface OneToOneAssociation
* the specified object, represented as a {@link Consent}.
*/
Consent isAssociationValid(
- final ManagedObject targetAdapter,
- final ManagedObject proposedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy);
+ ManagedObject targetAdapter,
+ ManagedObject proposedAdapter,
+ InteractionConstraint iConstraint);
/**
* Returns true if calculated from other data in the object, that is, should
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 e8bc2ace6cb..858046eed5c 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
@@ -30,7 +30,6 @@
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.SemanticsOf;
-import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.exceptions.RecoverableException;
import org.apache.causeway.applib.services.bookmark.Bookmark;
import org.apache.causeway.applib.services.command.Command;
@@ -48,11 +47,13 @@
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facets.FacetedMethod;
import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
-import org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet;
+import org.apache.causeway.core.metamodel.facets.actions.prototype.HiddenFacetForDeploymentType;
import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
import org.apache.causeway.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
+import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
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;
@@ -77,9 +78,8 @@ class ObjectActionDefault
public static ActionScope getType(final String typeStr) {
final ActionScope type = ActionScope.valueOf(typeStr);
- if (type == null) {
- throw new IllegalArgumentException();
- }
+ if (type == null)
+ throw new IllegalArgumentException();
return type;
}
@@ -134,9 +134,8 @@ private ObjectSpecification loadDeclaringType() {
.map(ActionInvocationFacet::getDeclaringType);
// JUnit support
if(testing
- && declaringType.isEmpty()) {
- return specLoaderInternal().loadSpecification(getFacetedMethod().methodFacade().getDeclaringClass());
- }
+ && declaringType.isEmpty())
+ return specLoaderInternal().loadSpecification(getFacetedMethod().methodFacade().getDeclaringClass());
return declaringType.orElseThrow(()->_Exceptions
.illegalState("missing ActionInvocationFacet on action %s", getFeatureIdentifier()));
}
@@ -174,9 +173,8 @@ private ObjectSpecification loadReturnType() {
.map(ActionInvocationFacet::getReturnType);
// JUnit support
if(testing
- && returType.isEmpty()) {
- return specLoaderInternal().loadSpecification(getFacetedMethod().methodFacade().getReturnType());
- }
+ && returType.isEmpty())
+ return specLoaderInternal().loadSpecification(getFacetedMethod().methodFacade().getReturnType());
return returType.orElseThrow(()->_Exceptions
.illegalState("framework bug: missing ActionInvocationFacet on action %s", getFeatureIdentifier()));
}
@@ -187,10 +185,9 @@ private ObjectSpecification loadReturnType() {
*/
@Override
public boolean hasReturn() {
- if(getReturnType() == null) {
- // this shouldn't happen; return Type always defined, even if represents void.class
+ if(getReturnType() == null)
+ // this shouldn't happen; return Type always defined, even if represents void.class
return false;
- }
return !getReturnType().isVoidPrimitive();
}
@@ -202,7 +199,7 @@ public ActionScope getScope() {
}
private static ActionScope getScope(final FacetHolder facetHolder) {
- return facetHolder.containsFacet(PrototypeFacet.class)
+ return facetHolder.containsFacet(HiddenFacetForDeploymentType.class)
? ActionScope.PROTOTYPE
: ActionScope.PRODUCTION;
}
@@ -268,27 +265,24 @@ public Can getParameters(final Predicate= parameters.size()) {
- throw new IllegalArgumentException(
+ if (position >= parameters.size())
+ throw new IllegalArgumentException(
"getParameter(int): only " + parameters.size() + " parameters, position=" + position);
- }
return parameters.getElseFail(position);
}
// -- VISIBLE
@Override
- public VisibilityContext createVisibleInteractionContext(
- final ManagedObject target,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Where where) {
+ protected VisibilityContext createVisibleInteractionContext(
+ final ManagedObject target,
+ final InteractionConstraint iConstraint) {
return new ActionVisibilityContext(
headFor(target),
this,
getFeatureIdentifier(),
- interactionInitiatedBy,
- where,
- InteractionUtils.renderPolicy(target));
+ iConstraint,
+ RenderPolicy.forNonActionParam(target));
}
// -- USABLE
@@ -296,15 +290,13 @@ public VisibilityContext createVisibleInteractionContext(
@Override
public UsabilityContext createUsableInteractionContext(
final ManagedObject target,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Where where) {
+ final InteractionConstraint iConstraint) {
return new ActionUsabilityContext(
headFor(target),
this,
getFeatureIdentifier(),
- interactionInitiatedBy,
- where,
- InteractionUtils.renderPolicy(target));
+ iConstraint,
+ RenderPolicy.forNonActionParam(target));
}
// -- VALIDATE
@@ -313,14 +305,14 @@ public UsabilityContext createUsableInteractionContext(
public Consent isArgumentSetValid(
final InteractionHead head,
final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
final InteractionResultSet resultSet = new InteractionResultSet();
- validateArgumentsIndividually(head, proposedArguments, interactionInitiatedBy, resultSet);
+ validateArgumentsIndividually(head, proposedArguments, iConstraint, resultSet);
if (resultSet.isAllowed()) {
// only check the action's own validity if all the arguments are OK.
- validateArgumentSet(head, proposedArguments, interactionInitiatedBy, resultSet);
+ validateArgumentSet(head, proposedArguments, iConstraint, resultSet);
}
return resultSet.createConsent();
@@ -330,11 +322,11 @@ public Consent isArgumentSetValid(
public InteractionResultSet isArgumentSetValidForParameters(
final InteractionHead head,
final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
final InteractionResultSet resultSet = new InteractionResultSet();
- validateArgumentsIndividually(head, proposedArguments, interactionInitiatedBy, resultSet);
+ validateArgumentsIndividually(head, proposedArguments, iConstraint, resultSet);
return resultSet;
}
@@ -342,7 +334,7 @@ public InteractionResultSet isArgumentSetValidForParameters(
private void validateArgumentsIndividually(
final InteractionHead head,
final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy,
+ final InteractionConstraint iConstraint,
final InteractionResultSet resultSet) {
var actionParameters = getParameters();
@@ -350,7 +342,7 @@ private void validateArgumentsIndividually(
for (int i = 0; i < proposedArguments.size(); i++) {
var validityContext = actionParameters.getElseFail(i)
.createProposedArgumentInteractionContext(
- head, proposedArguments, i, interactionInitiatedBy);
+ head, proposedArguments, i, iConstraint);
InteractionUtils.isValidResultSet(getParameter(i), validityContext, resultSet);
}
@@ -361,10 +353,10 @@ private void validateArgumentsIndividually(
public Consent isArgumentSetValidForAction(
final InteractionHead head,
final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
final InteractionResultSet resultSet = new InteractionResultSet();
- validateArgumentSet(head, proposedArguments, interactionInitiatedBy, resultSet);
+ validateArgumentSet(head, proposedArguments, iConstraint, resultSet);
return resultSet.createConsent();
}
@@ -372,57 +364,53 @@ public Consent isArgumentSetValidForAction(
protected void validateArgumentSet(
final InteractionHead head,
final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy,
+ final InteractionConstraint iConstraint,
final InteractionResultSet resultSet) {
var validityContext = createActionInvocationInteractionContext(
- head, proposedArguments, interactionInitiatedBy);
+ head, proposedArguments, iConstraint);
InteractionUtils.isValidResultSet(this, validityContext, resultSet);
}
ActionValidityContext createActionInvocationInteractionContext(
final InteractionHead head,
final Can proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
return new ActionValidityContext(
head,
this,
getFeatureIdentifier(),
proposedArguments,
- interactionInitiatedBy);
+ iConstraint);
}
// -- EXECUTE
@Override
public ManagedObject executeWithRuleChecking(
- final InteractionHead head,
- final Can arguments,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Where where) {
+ final InteractionHead head,
+ final Can arguments,
+ final InteractionConstraint iConstraint) throws AuthorizationException {
var target = head.owner();
// see it?
- final Consent visibility = isVisible(target, interactionInitiatedBy, where);
- if (visibility.isVetoed()) {
- throw new HiddenException();
- }
+ final Consent visibility = isVisible(target, iConstraint);
+ if (visibility.isVetoed())
+ throw new HiddenException();
// use it?
- final Consent usability = isUsable(target, interactionInitiatedBy, where);
- if(usability.isVetoed()) {
- throw new DisabledException(usability.getReasonAsString().orElse("no reason given"));
- }
+ final Consent usability = isUsable(target, iConstraint);
+ if(usability.isVetoed())
+ throw new DisabledException(usability.getReasonAsString().orElse("no reason given"));
// do it?
- final Consent validity = isArgumentSetValid(head, arguments, interactionInitiatedBy);
- if(validity.isVetoed()) {
- throw new RecoverableException(validity.getReasonAsString().orElse("no reason given"));
- }
+ final Consent validity = isArgumentSetValid(head, arguments, iConstraint);
+ if(validity.isVetoed())
+ throw new RecoverableException(validity.getReasonAsString().orElse("no reason given"));
- return execute(head, arguments, interactionInitiatedBy);
+ return execute(head, arguments, iConstraint);
}
/**
@@ -432,16 +420,16 @@ public ManagedObject executeWithRuleChecking(
@Override
public ManagedObject execute(
final InteractionHead head,
- final Can argumentAdapters,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final Can arguments,
+ final InteractionConstraint iConstraint) {
- _Assert.assertEquals(this.getParameterCount(), argumentAdapters.size(),
+ _Assert.assertEquals(this.getParameterCount(), arguments.size(),
"action's parameter count and provided argument count must match");
final ManagedObject owner = head.owner();
- if(!interactionInitiatedBy.isPassThrough()) {
- setupCommand(head, argumentAdapters);
+ if(!iConstraint.initiatedBy().isPassThrough()) {
+ setupCommand(head, arguments);
if(log.isInfoEnabled()) {
Optional bookmarkIfAny = owner.getBookmark();
@@ -450,16 +438,16 @@ public ManagedObject execute(
getFeatureIdentifier().logicalTypeName(),
getFeatureIdentifier().memberLogicalName(),
UtilStr.entityAsStr(bookmark, getSpecificationLoader()),
- argsFor(getParameters(), argumentAdapters));
+ argsFor(getParameters(), arguments));
});
}
}
- return this.executeInternal(head, argumentAdapters, interactionInitiatedBy);
+ return this.executeInternal(head, arguments, iConstraint.initiatedBy());
}
/**
- * private API, called by mixins
+ * internal API, called by mixins
*/
protected ManagedObject executeInternal(
final InteractionHead head,
@@ -530,9 +518,8 @@ public void setupCommand(
final InteractionHead head,
final Can argumentAdapters) {
- if(head.owner().objSpec().isValue()) {
- return; // do not record value type mixin actions
- }
+ if(head.owner().objSpec().isValue())
+ return; // do not record value type mixin actions
setupCommand(head,
interactionId->commandDtoFor(interactionId, head, argumentAdapters));
@@ -571,9 +558,8 @@ public FacetHolder getFacetHolder() {
// -- HELPER
protected String argsFor(final Can parameters, final Can arguments) {
- if(parameters.size() != arguments.size()) {
- return "???"; // shouldn't happen
- }
+ if(parameters.size() != arguments.size())
+ return "???"; // shouldn't happen
return parameters.stream().map(IndexedFunction.zeroBased((i, param) -> {
var id = param.getId();
var argStr = argStr(id, arguments, i);
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..08fd241be1e 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
@@ -35,6 +35,7 @@
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
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.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
@@ -154,14 +155,14 @@ protected ManagedObject mixinAdapterFor(final ManagedObject mixeeAdapter) {
public ManagedObject execute(
final InteractionHead head,
final Can argumentAdapters,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
final ManagedObject owner = head.owner();
final ManagedObject target = mixinAdapterFor(mixinSpec, owner);
_Assert.assertEquals(target.objSpec(), head.target().objSpec(),
"head has the wrong target (should be a mixed-in adapter, but is the mixee adapter)");
- if(!interactionInitiatedBy.isPassThrough()) {
+ if(!iConstraint.initiatedBy().isPassThrough()) {
setupCommand(head, argumentAdapters);
if(log.isInfoEnabled()) {
@@ -178,7 +179,7 @@ public ManagedObject execute(
return mixinAction.executeInternal(
head, argumentAdapters,
- interactionInitiatedBy);
+ iConstraint.initiatedBy());
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java
index 744b4aad4e3..63b1cfeb380 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java
@@ -21,7 +21,10 @@
import java.util.Optional;
import java.util.function.Supplier;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.Identifier;
+import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.exceptions.unrecoverable.DomainModelException;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
@@ -37,6 +40,7 @@
import org.apache.causeway.core.metamodel.facets.param.autocomplete.MinLengthUtil;
import org.apache.causeway.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
import org.apache.causeway.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
import org.apache.causeway.core.metamodel.interactions.RenderPolicy;
@@ -51,7 +55,6 @@
import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
abstract class ObjectActionParameterAbstract
implements
@@ -188,9 +191,8 @@ public Can getAutoComplete(
final InteractionInitiatedBy interactionInitiatedBy) {
var autoCompleteFacet = getFacet(ActionParameterAutoCompleteFacet.class);
- if (autoCompleteFacet == null) {
- return Can.empty();
- }
+ if (autoCompleteFacet == null)
+ return Can.empty();
var paramSpec = getElementType();
@@ -226,9 +228,8 @@ public Can getChoices(
var paramSpec = getElementType();
var choicesFacet = getFacet(ActionParameterChoicesFacet.class);
- if (choicesFacet == null) {
- return Can.empty();
- }
+ if (choicesFacet == null)
+ return Can.empty();
var visibleChoices = choicesFacet.getChoices(paramSpec,
pendingArgs.actionInteractionHead(),
@@ -296,11 +297,10 @@ static void checkChoicesOrAutoCompleteType(
// in other words is assignable from
// TODO: should implement this instead as a MetaModelValidator (subject to [CAUSEWAY-3172])
- if (!choiceWrappedSpec.isOfType(paramWrappedSpec)) {
- throw new DomainModelException(String.format(
+ if (!choiceWrappedSpec.isOfType(paramWrappedSpec))
+ throw new DomainModelException(String.format(
"Type incompatible with parameter type; expected %s, but was %s",
paramSpec.getFullIdentifier(), choiceClass.getName()));
- }
}
}
@@ -310,10 +310,10 @@ private ParamVisibilityContext createArgumentVisibilityContext(
final InteractionHead head,
final Can pendingArgs,
final int position,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
return new ParamVisibilityContext(
- head, parentAction, getFeatureIdentifier(), pendingArgs, position, interactionInitiatedBy,
+ head, parentAction, getFeatureIdentifier(), pendingArgs, position, iConstraint.withWhere(Where.OBJECT_FORMS),
RenderPolicy.forActionParameters());
}
@@ -321,10 +321,10 @@ head, parentAction, getFeatureIdentifier(), pendingArgs, position, interactionIn
public Consent isVisible(
final InteractionHead head,
final Can pendingArgs,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
var visibilityContext = createArgumentVisibilityContext(
- head, pendingArgs, getParameterIndex(), interactionInitiatedBy);
+ head, pendingArgs, getParameterIndex(), iConstraint);
return InteractionUtils.isVisibleResult(this, visibilityContext).createConsent();
}
@@ -335,7 +335,7 @@ private ParamUsabilityContext createArgumentUsabilityContext(
final InteractionHead head,
final Can pendingArgs,
final int position,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
return new ParamUsabilityContext(
head,
@@ -343,7 +343,7 @@ private ParamUsabilityContext createArgumentUsabilityContext(
getFeatureIdentifier(),
pendingArgs,
position,
- interactionInitiatedBy,
+ iConstraint,
RenderPolicy.forActionParameters());
}
@@ -351,10 +351,10 @@ private ParamUsabilityContext createArgumentUsabilityContext(
public Consent isUsable(
final InteractionHead head,
final Can pendingArgs,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
var usabilityContext = createArgumentUsabilityContext(
- head, pendingArgs, getParameterIndex(), interactionInitiatedBy);
+ head, pendingArgs, getParameterIndex(), iConstraint);
var usableResult = InteractionUtils.isUsableResult(this, usabilityContext);
return usableResult.createConsent();
@@ -367,20 +367,20 @@ public ParamValidityContext createProposedArgumentInteractionContext(
final InteractionHead head,
final Can proposedArguments,
final int position,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
return new ParamValidityContext(
- head, parentAction, getFeatureIdentifier(), proposedArguments, position, interactionInitiatedBy);
+ head, parentAction, getFeatureIdentifier(), proposedArguments, position, iConstraint);
}
@Override
public Consent isValid(
final InteractionHead head,
final Can pendingArgs,
- final InteractionInitiatedBy interactionInitiatedBy) {
+ final InteractionConstraint iConstraint) {
var validityContext = createProposedArgumentInteractionContext(
- head, pendingArgs, getParameterIndex(), interactionInitiatedBy);
+ head, pendingArgs, getParameterIndex(), iConstraint);
var validResult = InteractionUtils.isValidResult(this, validityContext);
return validResult.createConsent();
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java
index cd53c40cb7c..fcb2c961b83 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java
@@ -26,6 +26,8 @@
import java.util.function.Function;
import java.util.function.Supplier;
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.Identifier;
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.services.iactn.InteractionProvider;
@@ -42,11 +44,12 @@
import org.apache.causeway.core.metamodel.facets.HasFacetedMethod;
import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet;
import org.apache.causeway.core.metamodel.facets.all.help.HelpFacet;
-import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacetForLayout;
import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText;
import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet;
import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor;
import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
+import org.apache.causeway.core.metamodel.interactions.InteractionConstraint;
import org.apache.causeway.core.metamodel.interactions.InteractionContext;
import org.apache.causeway.core.metamodel.interactions.InteractionHead;
import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
@@ -61,7 +64,6 @@
import org.apache.causeway.schema.cmd.v2.CommandDto;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
abstract class ObjectMemberAbstract
implements
@@ -84,9 +86,8 @@ protected ObjectMemberAbstract(
this.featureIdentifier = featureIdentifier;
this.facetedMethod = facetedMethod;
this.featureType = featureType;
- if (getId() == null) {
- throw new IllegalArgumentException("Id must always be set");
- }
+ if (getId() == null)
+ throw new IllegalArgumentException("Id must always be set");
}
// -- IDENTIFIERS
@@ -113,13 +114,12 @@ public final String getFriendlyName(final Supplier domainObjectPr
var namedFacet = getFacet(MemberNamedFacet.class);
- if(namedFacet==null) {
- throw _Exceptions.unrecoverable("no MemberNamedFacet preset on %s", getFeatureIdentifier());
- }
+ if(namedFacet==null)
+ throw _Exceptions.unrecoverable("no MemberNamedFacet preset on %s", getFeatureIdentifier());
return namedFacet
.getSpecialization()
- .fold( textFacet->textFacet.translated(),
+ .fold( HasStaticText::translated,
textFacet->textFacet.textElseNull(headFor(domainObjectProvider.get()).target()));
}
@@ -138,7 +138,7 @@ public final Optional getDescription(final Supplier