You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/01/23 19:44:32 UTC
[isis] branch master updated: ISIS-2492: use action streams with
inheritance support where applicable
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 3038f14 ISIS-2492: use action streams with inheritance support where applicable
3038f14 is described below
commit 3038f146d02b41b99f06bb524ba1dcef1a47850b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jan 23 20:44:17 2021 +0100
ISIS-2492: use action streams with inheritance support where applicable
---
.../MethodPrefixBasedFacetFactoryAbstract.java | 70 +++++++++++-----------
...nChoicesForCollectionParameterFacetFactory.java | 1 +
.../annotation/HomePageFacetAnnotationFactory.java | 6 +-
.../BookmarkPolicyFacetFallbackFactory.java | 5 +-
...jectSpecIdFacetDerivedFromClassNameFactory.java | 5 +-
.../param/DeriveFacetsPostProcessor.java | 6 +-
.../dflt/ProgrammingModelFacetsJava8.java | 9 ++-
.../ApplicationFeatureRepositoryDefault.java | 8 +--
.../services/grid/GridSystemServiceAbstract.java | 2 +-
.../grid/bootstrap3/GridSystemServiceBS3.java | 2 +-
.../services/metamodel/MetaModelExporter.java | 4 +-
.../metamodel/MetaModelServiceDefault.java | 39 +++---------
.../core/metamodel/spec/ObjectSpecification.java | 10 ++--
.../spec/feature/ObjectActionContainer.java | 10 ++--
.../spec/feature/ObjectAssociationContainer.java | 14 +++--
.../specloader/specimpl/ObjectMemberAbstract.java | 2 -
.../specloader/specimpl/ObjectMemberContainer.java | 46 +++++++-------
.../specimpl/ObjectSpecificationAbstract.java | 10 +---
.../specimpl/dflt/ObjectSpecificationDefault.java | 14 +++--
.../ApplicationFeatureRepositoryDefaultTest.java | 3 +
.../command/CommandExecutorServiceDefault.java | 9 +--
.../wrapper/WrapperFactoryDefault.java | 8 +--
.../handlers/DomainObjectInvocationHandler.java | 4 +-
.../domainobjects/DomainObjectReprRenderer.java | 2 +-
.../domaintypes/DomainTypeReprRenderer.java | 2 +-
.../service/swagger/internal/Generation.java | 4 +-
.../rendering/service/swagger/internal/Util.java | 8 +--
.../resources/DomainTypeResourceServerside.java | 4 +-
.../collection/AssociatedWithActionsHelper.java | 2 +-
.../wicket/ui/components/layout/bs3/col/Col.java | 2 +-
30 files changed, 144 insertions(+), 167 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
index 4c18093..00d83dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
@@ -108,42 +108,44 @@ implements MethodPrefixBasedFacetFactory {
@Override
public boolean visit(ObjectSpecification objectSpec, MetaModelValidator metaModelValidator) {
+ // as an optimization only checking declared members (skipping inherited ones)
+
// ensure accepted actions do not have any of the reserved prefixes
objectSpec.streamDeclaredActions(MixedIn.EXCLUDED)
- .forEach(objectAction -> {
-
- val actionId = objectAction.getId();
-
- for (val prefix : prefixes) {
-
- if (isPrefixed(actionId, prefix)) {
-
- val explanation =
- objectAction.getParameterCount() > 0
- && noParamsOnly
- && (MethodLiteralConstants.HIDE_PREFIX.equals(prefix)
- || MethodLiteralConstants.DISABLE_PREFIX.equals(prefix))
- ? " (such methods must have no parameters, '"
- + "isis.core.meta-model.validator.no-params-only"
- + "' config property)"
- : "";
-
- val message = "%s#%s: has prefix %s, is probably intended as a supporting method "
- + "for a property, collection or action%s. If the method is intended to "
- + "be an action, then rename and use @ActionLayout(named=\"...\") or ignore "
- + "completely using @Programmatic";
-
- metaModelValidator.onFailure(
- objectSpec,
- objectSpec.getIdentifier(),
- message,
- objectSpec.getIdentifier().getClassName(),
- actionId,
- prefix,
- explanation);
- }
- }
- });
+ .forEach(objectAction -> {
+
+ val actionId = objectAction.getId();
+
+ for (val prefix : prefixes) {
+
+ if (isPrefixed(actionId, prefix)) {
+
+ val explanation =
+ objectAction.getParameterCount() > 0
+ && noParamsOnly
+ && (MethodLiteralConstants.HIDE_PREFIX.equals(prefix)
+ || MethodLiteralConstants.DISABLE_PREFIX.equals(prefix))
+ ? " (such methods must have no parameters, '"
+ + "isis.core.meta-model.validator.no-params-only"
+ + "' config property)"
+ : "";
+
+ val message = "%s#%s: has prefix %s, is probably intended as a supporting method "
+ + "for a property, collection or action%s. If the method is intended to "
+ + "be an action, then rename and use @ActionLayout(named=\"...\") or ignore "
+ + "completely using @Programmatic";
+
+ metaModelValidator.onFailure(
+ objectSpec,
+ objectSpec.getIdentifier(),
+ message,
+ objectSpec.getIdentifier().getClassName(),
+ actionId,
+ prefix,
+ explanation);
+ }
+ }
+ });
return true;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
index a261af1..7c19673 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
@@ -78,6 +78,7 @@ implements MetaModelRefiner {
final ObjectSpecification objectSpec,
final MetaModelValidator validator) {
+ // as an optimization only checking declared members (skipping inherited ones)
objectSpec.streamDeclaredActions(MixedIn.INCLUDED)
.forEach(objectAction->{
if(objectAction instanceof ObjectActionMixedIn) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
index 84a9ba2..e2c830f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
@@ -80,10 +80,8 @@ implements MetaModelRefiner {
@Override
public boolean visit(ObjectSpecification objectSpec, MetaModelValidator validator) {
- val objectActions =
- objectSpec.streamDeclaredActions(MixedIn.EXCLUDED);
-
- objectActions
+ // as an optimization only checking declared members (skipping inherited ones)
+ objectSpec.streamDeclaredActions(MixedIn.EXCLUDED)
.filter(objectAction->objectAction.containsFacet(HomePageFacet.class))
.forEach(objectAction->{
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
index 0842570..8232480 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
@@ -57,9 +57,8 @@ implements MetaModelRefiner {
programmingModel.addValidator((objectSpec, validator) -> {
- final Stream<ObjectAction> objectActions = objectSpec.streamDeclaredActions(MixedIn.EXCLUDED);
-
- objectActions
+ // as an optimization only checking declared members (skipping inherited ones)
+ objectSpec.streamDeclaredActions(MixedIn.EXCLUDED)
.filter(objectAction->{
final BookmarkPolicyFacet bookmarkFacet = objectAction.getFacet(BookmarkPolicyFacet.class);
if(bookmarkFacet == null || bookmarkFacet.isFallback() ||
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
index 17a38ee..63c5d97 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
@@ -187,10 +187,9 @@ implements MetaModelRefiner, ObjectSpecIdFacetFactory {
if(!DomainServiceFacet.getNatureOfService(objectSpec).isPresent()) {
return false; //skip validation
}
-
+
// don't check if domain service has only programmatic methods
- final Stream<ObjectAction> objectActions = objectSpec.streamDeclaredActions(MixedIn.INCLUDED);
- return objectActions.anyMatch(__->true); // return true if not empty
+ return objectSpec.streamActions(MixedIn.INCLUDED).count()>0L;
}
return false; //skip validation
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
index c93185d..15def82 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
@@ -122,9 +122,11 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
@Override
public void postProcess(final ObjectSpecification objectSpecification) {
+ //XXX in principle it would be sufficient to just process declared members; can optimize if worth the effort
+
// all the actions of this type
val actionTypes = inferActionTypes();
- final Stream<ObjectAction> objectActions = objectSpecification.streamDeclaredActions(actionTypes, MixedIn.INCLUDED);
+ final Stream<ObjectAction> objectActions = objectSpecification.streamActions(actionTypes, MixedIn.INCLUDED);
// and all the collections of this type
final Stream<OneToManyAssociation> collections = objectSpecification.streamCollections(MixedIn.INCLUDED);
@@ -185,7 +187,7 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
final ObjectActionParameter.Predicates.ScalarParameter whetherScalarParamOfType =
new ObjectActionParameter.Predicates.ScalarParameter(specification);
- objectSpecification.streamDeclaredActions(actionTypes, MixedIn.INCLUDED)
+ objectSpecification.streamActions(actionTypes, MixedIn.INCLUDED)
.filter(ObjectAction.Predicates.associatedWith(collection))
.forEach(action->{
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
index c521488..82ffe7c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
@@ -360,10 +360,13 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
addValidator(new TitlesAndTranslationsValidator());
addValidator((objectSpec, validator) -> {
- final long numActions = objectSpec.streamDeclaredActions(MixedIn.INCLUDED).count();
- if (numActions > 0L) {
+
+ val actions = objectSpec.streamActions(MixedIn.INCLUDED).collect(Collectors.toList());
+
+ final int numActions = actions.size();
+ if (numActions > 0) {
- val actionIds = objectSpec.streamDeclaredActions(MixedIn.INCLUDED)
+ val actionIds = actions.stream()
.map(ObjectAction::getIdentifier)
.map(Identifier::toString)
.collect(Collectors.joining(", "));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index 35f703e..765b5fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -137,13 +137,11 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
return;
}
- final List<ObjectAssociation> properties = spec.streamDeclaredAssociations(MixedIn.INCLUDED)
- .filter(ObjectAssociation.Predicates.PROPERTIES)
+ final List<ObjectAssociation> properties = spec.streamProperties(MixedIn.INCLUDED)
.collect(Collectors.toList());
- final List<ObjectAssociation> collections = spec.streamDeclaredAssociations(MixedIn.INCLUDED)
- .filter(ObjectAssociation.Predicates.COLLECTIONS)
+ final List<ObjectAssociation> collections = spec.streamCollections(MixedIn.INCLUDED)
.collect(Collectors.toList());
- final List<ObjectAction> actions = spec.streamDeclaredActions(MixedIn.INCLUDED)
+ final List<ObjectAction> actions = spec.streamActions(MixedIn.INCLUDED)
.collect(Collectors.toList());
if (properties.isEmpty() && collections.isEmpty() && actions.isEmpty()) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 9b4f3cd..da4eda7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -181,7 +181,7 @@ implements GridSystemService<G> {
val oneToOneAssociationById = ObjectMember.mapById(getOneToOneAssociations(objectSpec));
val oneToManyAssociationById = ObjectMember.mapById(getOneToManyAssociations(objectSpec));
- val objectActionById = ObjectMember.mapById(objectSpec.streamDeclaredActions(MixedIn.INCLUDED));
+ val objectActionById = ObjectMember.mapById(objectSpec.streamActions(MixedIn.INCLUDED));
final AtomicInteger propertySequence = new AtomicInteger(0);
fcGrid.visit(new Grid.VisitorAdapter() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
index 57781c6..9122257 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
@@ -178,7 +178,7 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
val oneToOneAssociationById = ObjectMember.mapById(getOneToOneAssociations(objectSpec));
val oneToManyAssociationById = ObjectMember.mapById(getOneToManyAssociations(objectSpec));
- val objectActionById = ObjectMember.mapById( objectSpec.streamDeclaredActions(MixedIn.INCLUDED));
+ val objectActionById = ObjectMember.mapById(objectSpec.streamActions(MixedIn.INCLUDED));
val propertyLayoutDataById = bs3Grid.getAllPropertiesById();
val collectionLayoutDataById = bs3Grid.getAllCollectionsById();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
index 0a5ce77..a072b4f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
@@ -267,8 +267,8 @@ class MetaModelExporter {
}
final List<Action> actions = domainClass.getActions().getAct();
- specification.streamDeclaredActions(MixedIn.INCLUDED)
- .map(action ->asXsdType(action, domainClassByObjectSpec, config))
+ specification.streamActions(MixedIn.INCLUDED)
+ .map(action->asXsdType(action, domainClassByObjectSpec, config))
.forEach(actions::add);
sortMembers(actions);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index d608d75..d3a0983 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.services.metamodel;
import java.util.Collections;
import java.util.List;
-import java.util.stream.Stream;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
@@ -48,7 +47,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.MixedIn;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -117,36 +115,17 @@ public class MetaModelServiceDefault implements MetaModelService {
continue;
}
- {
- final Stream<ObjectAssociation> properties =
- spec.streamDeclaredAssociations(MixedIn.EXCLUDED)
- .filter(ObjectAssociation.Predicates.PROPERTIES);
+ spec.streamProperties(MixedIn.INCLUDED)
+ .filter(otoa->!exclude(otoa))
+ .forEach(otoa->rows.add(new DomainMemberDefault(spec, otoa)));
- properties
- .map(property->(OneToOneAssociation) property)
- .filter(otoa->!exclude(otoa))
- .forEach(otoa->rows.add(new DomainMemberDefault(spec, otoa)));
- }
-
- {
- final Stream<ObjectAssociation> associations =
- spec.streamDeclaredAssociations(MixedIn.EXCLUDED)
- .filter(ObjectAssociation.Predicates.COLLECTIONS);
-
- associations
- .map(collection->(OneToManyAssociation) collection)
- .filter(otma->!exclude(otma))
- .forEach(otma->rows.add(new DomainMemberDefault(spec, otma)));
- }
-
- {
- final Stream<ObjectAction> actions =
- spec.streamDeclaredActions(MixedIn.INCLUDED);
+ spec.streamCollections(MixedIn.INCLUDED)
+ .filter(otma->!exclude(otma))
+ .forEach(otma->rows.add(new DomainMemberDefault(spec, otma)));
- actions
- .filter(action->!exclude(action))
- .forEach(action->rows.add(new DomainMemberDefault(spec, action)));
- }
+ spec.streamActions(MixedIn.INCLUDED)
+ .filter(action->!exclude(action))
+ .forEach(action->rows.add(new DomainMemberDefault(spec, action)));
}
Collections.sort(rows);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 0b7958a..059958a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -133,7 +133,7 @@ extends
* @since 2.0
*/
public default Optional<MixedInMember> getMixedInMember(ObjectSpecification onType) {
- return streamDeclaredActions(MixedIn.INCLUDED)
+ return streamActions(MixedIn.INCLUDED)
.filter(MixedInMember.class::isInstance)
.map(MixedInMember.class::cast)
.filter(member->member.getMixinType() == onType)
@@ -447,17 +447,17 @@ extends
}
/**
- * Streams all FacetHolders associated with this spec.
+ * Streams all FacetHolders associated with this spec. (including inherited)
* @since 2.0
*/
default Stream<FacetHolder> streamFacetHolders(){
val self = Stream.of(this);
- val actions = streamDeclaredActions(MixedIn.EXCLUDED);
- val actionParameters = streamDeclaredActions(MixedIn.EXCLUDED)
+ val actions = streamActions(MixedIn.EXCLUDED);
+ val actionParameters = streamActions(MixedIn.EXCLUDED)
.flatMap(action->action.getParameterCount()>0
? action.getParameters().stream()
- : Stream.empty());
+ : Stream.empty());
val properties = streamProperties(MixedIn.EXCLUDED);
val collections = streamCollections(MixedIn.EXCLUDED);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
index e74fa90..5f3d0c8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
@@ -30,17 +30,18 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.spec.ActionType;
public interface ObjectActionContainer {
-
+
// -- ACTION LOOKUP (INHERITANCE CONSIDERED)
/**
- * Same as {@link #getDeclaredAction(String, ActionType)}, but also considering any inherited object members.
+ * Similar to {@link #getDeclaredAction(String, ActionType)},
+ * but also considering any inherited object members. (mixed-in included)
* @param id
* @param type
*
* @implSpec If not found on the current 'type' search for the 'nearest' match in super-types,
* and if nothing found there, search the interfaces. Special care needs to be taken, as the
- * {@link ActionType} might be redeclared when inheriting from a super-type or interface.
+ * {@link ActionType} might be redeclared when inheriting from a super-type or interface.
*/
Optional<ObjectAction> getAction(String id, @Nullable ActionType type);
@@ -51,7 +52,6 @@ public interface ObjectActionContainer {
type==null ? "any" : type.name()));
}
-
default Optional<ObjectAction> getAction(String id) {
return getAction(id, null);
}
@@ -64,7 +64,7 @@ public interface ObjectActionContainer {
// -- ACTION LOOKUP, DECLARED ACTIONS (NO INHERITANCE CONSIDERED)
/**
- * Get the action object represented by the specified identity string.
+ * Get the action object represented by the specified identity string. (mixed-in included)
* <p>
* The identity string can be either fully specified with parameters (as per
* {@link Identifier#toNameParmsIdentityString()} or in abbreviated form (
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationContainer.java
index b573310..a6c8112 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationContainer.java
@@ -35,9 +35,11 @@ public interface ObjectAssociationContainer {
*
* @implSpec If not found on the current 'type' search for the 'nearest' match in super-types,
* and if nothing found there, search the interfaces.
+ * TODO make sure callers don't instead want the non recursive variant
*/
Optional<ObjectAssociation> getAssociation(String id);
+ // TODO make sure callers don't instead want the non recursive variant
default ObjectAssociation getAssociationElseFail(String id) {
return getAssociation(id)
.orElseThrow(()->_Exceptions.noSuchElement("id=%s", id));
@@ -51,6 +53,7 @@ public interface ObjectAssociationContainer {
*
* Throw a {@link ObjectSpecificationException} if no such association
* exists.
+ * TODO make sure callers don't instead want the recursive variant
*/
Optional<ObjectAssociation> getDeclaredAssociation(String id);
@@ -62,6 +65,9 @@ public interface ObjectAssociationContainer {
*
* @implSpec Walk through the type hierarchy nearest to farthest and add any ObjectAssociation to the stream,
* except don't add ObjectAssociations that already have been added (due to inheritance).
+ *
+ * TODO make sure callers don't instead want the non-recursive variant
+ *
*/
Stream<ObjectAssociation> streamAssociations(MixedIn contributed);
@@ -69,7 +75,7 @@ public interface ObjectAssociationContainer {
/**
* All {@link ObjectAssociation association}s that represent
* {@link OneToOneAssociation properties}.
- *
+ * TODO make sure callers don't instead want the non recursive variant
*/
default Stream<OneToOneAssociation> streamProperties(MixedIn contributed) {
return streamAssociations(contributed)
@@ -80,9 +86,7 @@ public interface ObjectAssociationContainer {
/**
* All {@link ObjectAssociation association}s that represents
* {@link OneToManyAssociation collections}.
- *
- * @return
- *
+ * TODO make sure callers don't instead want the non recursive variant
*/
default Stream<OneToManyAssociation> streamCollections(MixedIn contributed){
return streamAssociations(contributed)
@@ -99,7 +103,7 @@ public interface ObjectAssociationContainer {
* To get the statically visible fields (where any invisible and
* unauthorized fields have been removed) use
* <tt>ObjectAssociationFilters#staticallyVisible(...)</tt>
- *
+ * TODO make sure callers don't instead want the recursive variant
*/
Stream<ObjectAssociation> streamDeclaredAssociations(MixedIn contributed);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index d9a2e0f..fc96481 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -292,8 +292,6 @@ implements ObjectMember, HasMetaModelContext, HasFacetHolder {
return indexOfUnderscore != -1 && indexOfUnderscore != singularName.length() - 1;
}
-
-
// -- toString
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
index ac66936..1ee67b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
@@ -38,6 +38,10 @@ import lombok.val;
/**
* Responsibility: member lookup and streaming with support for inheritance,
* based on access to declared members, super-classes and interfaces.
+ * <p>
+ * TODO future extensions should also search the interfaces,
+ * but avoid doing redundant work when walking the type-hierarchy;
+ * (current elegant recursive solution will then need some tweaks to be efficient)
*/
public abstract class ObjectMemberContainer
extends FacetHolderImpl
@@ -66,24 +70,22 @@ implements
return declaredAction;
}
- if(superclass()==null) {
- // guard against unexpected reach of type hierarchy root
- return Optional.empty();
- }
-
return superclass().getAction(id, type);
-
- //XXX future extensions should also search the interfaces,
- // but avoid doing redundant work when walking the type-hierarchy;
- // (this elegant recursive solution will then need some tweaks to be efficient)
}
@Override
public Stream<ObjectAction> streamActions(
final ImmutableEnumSet<ActionType> types,
final MixedIn contributed) {
- //FIXME poorly implemented, inheritance not supported
- return streamDeclaredActions(contributed);
+
+ if(isTypeHierarchyRoot()) {
+ return Stream.empty(); // stop as we reached the Object class, which does not contribute actions
+ }
+
+ return Stream.concat(
+ streamDeclaredActions(contributed),
+ superclass().streamActions(contributed))
+ .distinct(); //FIXME equality by java object instance does not work here (will collect duplicates)
}
// -- ASSOCIATIONS
@@ -92,7 +94,7 @@ implements
public Optional<ObjectAssociation> getAssociation(String id) {
if(isTypeHierarchyRoot()) {
- return Optional.empty(); // stop search as we reached the Object class, which does not contribute actions
+ return Optional.empty(); // stop search as we reached the Object class, which does not contribute associations
}
val declaredAssociation = getDeclaredAssociation(id); // no inheritance considered
@@ -101,22 +103,20 @@ implements
return declaredAssociation;
}
- if(superclass()==null) {
- // guard against unexpected reach of type hierarchy root
- return Optional.empty();
- }
-
return superclass().getAssociation(id);
-
- //XXX future extensions should also search the interfaces,
- // but avoid doing redundant work when walking the type-hierarchy;
- // (this elegant recursive solution will then need some tweaks to be efficient)
}
@Override
public Stream<ObjectAssociation> streamAssociations(MixedIn contributed) {
- //FIXME poorly implemented, inheritance not supported
- return streamDeclaredAssociations(contributed);
+
+ if(isTypeHierarchyRoot()) {
+ return Stream.empty(); // stop as we reached the Object class, which does not contribute associations
+ }
+
+ return Stream.concat(
+ streamDeclaredAssociations(contributed),
+ superclass().streamAssociations(contributed))
+ .distinct(); //FIXME equality by java object instance does not work here (will collect duplicates)
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 0dec42d..fc1490d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -776,10 +776,7 @@ implements ObjectSpecification {
}
val mixinMethodName = mixinFacet.value();
- final Stream<ObjectAction> mixinActions = specification
- .streamDeclaredActions(ActionType.ANY, MixedIn.INCLUDED);
-
- mixinActions
+ specification.streamActions(ActionType.ANY, MixedIn.INCLUDED)
.filter(Predicates::isMixedInAssociation)
.map(ObjectActionDefault.class::cast)
.map(Factories.mixedInAssociation(this, mixinType, mixinMethodName))
@@ -831,10 +828,7 @@ implements ObjectSpecification {
}
val mixinMethodName = mixinFacet.value();
- final Stream<ObjectAction> mixinsActions = mixinSpec
- .streamDeclaredActions(ActionType.ANY, MixedIn.INCLUDED);
-
- mixinsActions
+ mixinSpec.streamActions(ActionType.ANY, MixedIn.INCLUDED)
.filter(Predicates::isMixedInAction)
.map(ObjectActionDefault.class::cast)
.map(Factories.mixedInAction(this, mixinType, mixinMethodName))
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 68034f2..fe02cab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -326,9 +326,10 @@ implements FacetHolder {
private void cataloguePropertiesAndCollections(BiConsumer<Method, ObjectMember> onMember) {
streamDeclaredAssociations(MixedIn.EXCLUDED)
.forEach(field->{
- final Stream<Facet> facets = field.streamFacets().filter(ImperativeFacet.PREDICATE);
- facets.forEach(facet->{
- final ImperativeFacet imperativeFacet = ImperativeFacet.Util.getImperativeFacet(facet);
+ field.streamFacets()
+ .filter(ImperativeFacet.PREDICATE)
+ .forEach(facet->{
+ val imperativeFacet = ImperativeFacet.Util.getImperativeFacet(facet);
for (final Method imperativeFacetMethod : imperativeFacet.getMethods()) {
onMember.accept(imperativeFacetMethod, field);
}
@@ -339,9 +340,10 @@ implements FacetHolder {
private void catalogueActions(BiConsumer<Method, ObjectMember> onMember) {
streamDeclaredActions(MixedIn.INCLUDED)
.forEach(userAction->{
- final Stream<Facet> facets = userAction.streamFacets().filter(ImperativeFacet.PREDICATE);
- facets.forEach(facet->{
- final ImperativeFacet imperativeFacet = ImperativeFacet.Util.getImperativeFacet(facet);
+ userAction.streamFacets()
+ .filter(ImperativeFacet.PREDICATE)
+ .forEach(facet->{
+ val imperativeFacet = ImperativeFacet.Util.getImperativeFacet(facet);
for (final Method imperativeFacetMethod : imperativeFacet.getMethods()) {
onMember.accept(imperativeFacetMethod, userAction);
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
index 738dc62..744164d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
@@ -129,6 +129,9 @@ public class ApplicationFeatureRepositoryDefaultTest {
allowing(mockSpec).streamDeclaredActions(with(MixedIn.INCLUDED));
will(returnValue(actions.stream()));
+
+ allowing(mockSpec).streamActions(with(MixedIn.INCLUDED));
+ will(returnValue(actions.stream()));
allowing(mockProp).getId();
will(returnValue("someProperty"));
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
index fc0198a..16ebd95 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
@@ -346,13 +346,8 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
private static ObjectAction findActionElseNull(
final ObjectSpecification specification,
final String localActionId) {
- final Stream<ObjectAction> objectActions = specification.streamDeclaredActions(MixedIn.INCLUDED);
-
- return objectActions
- .filter(objectAction->
- Objects.equals(objectAction.getId(), localActionId))
- .findAny()
- .orElse(null);
+
+ return specification.getAction(localActionId).orElse(null);
}
private static OneToOneAssociation findOneToOneAssociationElseNull(
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
index 939bcb3..711e7e5 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
@@ -18,9 +18,6 @@
*/
package org.apache.isis.core.runtimeservices.wrapper;
-import static org.apache.isis.applib.services.metamodel.MetaModelService.Mode.RELAXED;
-import static org.apache.isis.applib.services.wrapper.control.SyncControl.control;
-
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -104,6 +101,9 @@ import org.apache.isis.core.runtimeservices.wrapper.proxy.ProxyCreator;
import org.apache.isis.core.security.authentication.Authentication;
import org.apache.isis.schema.cmd.v2.CommandDto;
+import static org.apache.isis.applib.services.metamodel.MetaModelService.Mode.RELAXED;
+import static org.apache.isis.applib.services.wrapper.control.SyncControl.control;
+
import lombok.Data;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@@ -408,7 +408,7 @@ public class WrapperFactoryDefault implements WrapperFactory {
// don't care about anything other than actions
// (contributed properties and collections are read-only).
- Optional<ObjectActionMixedIn> targetActionIfAny = mixedInSpec.streamDeclaredActions(MixedIn.INCLUDED)
+ Optional<ObjectActionMixedIn> targetActionIfAny = mixedInSpec.streamActions(MixedIn.INCLUDED)
.filter(ObjectActionMixedIn.class::isInstance)
.map(ObjectActionMixedIn.class::cast)
.filter(x -> x.hasMixinAction((ObjectAction) mixinMember))
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
index 3a10ace..c904635 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -263,8 +263,8 @@ extends DelegatingInvocationHandlerDefault<T> {
return null;
}
val specification = domainObjectAdapter.getSpecification();
- val objectActions = specification.streamDeclaredActions(MixedIn.INCLUDED);
- val objectAssociations = specification.streamDeclaredAssociations(MixedIn.INCLUDED);
+ val objectActions = specification.streamActions(MixedIn.INCLUDED);
+ val objectAssociations = specification.streamAssociations(MixedIn.INCLUDED);
final Stream<ObjectMember> objectMembers = Stream.concat(objectActions, objectAssociations);
return objectMembers
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index 923b09a..f071cd7 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -302,7 +302,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
if (mode.isRegular()) {
final Stream<ObjectAction> actions = objectAdapter.getSpecification()
- .streamDeclaredActions(MixedIn.INCLUDED);
+ .streamActions(MixedIn.INCLUDED);
addActions(objectAdapter, actions, appendTo);
}
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
index f51e6ea..051dd14 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
@@ -111,7 +111,7 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
}
});
- final Stream<ObjectAction> actions = objectSpecification.streamDeclaredActions(MixedIn.INCLUDED);
+ final Stream<ObjectAction> actions = objectSpecification.streamActions(MixedIn.INCLUDED);
actions.forEach(action->{
final LinkBuilder linkBuilder = ActionDescriptionReprRenderer
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Generation.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Generation.java
index d354f7b..3486866 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Generation.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Generation.java
@@ -171,9 +171,9 @@ class Generation {
@SuppressWarnings("unused")
private void debugTraverseAllSpecs(final Collection<ObjectSpecification> allSpecs) {
for (final ObjectSpecification objectSpec : allSpecs) {
- objectSpec.streamDeclaredAssociations(MixedIn.INCLUDED)
+ objectSpec.streamAssociations(MixedIn.INCLUDED)
.collect(Collectors.toList());
- objectSpec.streamDeclaredActions(MixedIn.INCLUDED)
+ objectSpec.streamActions(MixedIn.INCLUDED)
.collect(Collectors.toList());
}
}
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java
index 86ea312..45ab194 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java
@@ -144,11 +144,11 @@ public final class Util {
final ClassExcluder classExcluder) {
val actionTypes = actionTypesFor(visibility);
- return objectSpec.streamDeclaredActions(actionTypes, MixedIn.INCLUDED)
+ return objectSpec.streamActions(actionTypes, MixedIn.INCLUDED)
.filter(objectAction->
- !classExcluder.exclude(objectAction) &&
- !visibility.isPublic() || isVisibleForPublic(objectAction)
- )
+ !classExcluder.exclude(objectAction)
+ && !visibility.isPublic()
+ || isVisibleForPublic(objectAction) )
.collect(Collectors.toList());
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
index f86c6b4..b8569a6 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
@@ -221,7 +221,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND);
}
- val action = parentSpec.getDeclaredAction(actionId)
+ val action = parentSpec.getAction(actionId)
.orElseThrow(()->RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND));
final ActionDescriptionReprRenderer renderer = new ActionDescriptionReprRenderer(resourceContext, null, JsonRepresentation.newMap());
@@ -244,7 +244,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND);
}
- val parentAction = parentSpec.getDeclaredAction(actionId)
+ val parentAction = parentSpec.getAction(actionId)
.orElseThrow(()->RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND));
final ObjectActionParameter actionParam = parentAction.getParameterByName(paramName);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
index bd048c1..d582f1c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
@@ -59,7 +59,7 @@ public class AssociatedWithActionsHelper implements Serializable {
final ObjectSpecification objectSpec = getObjectSpecification();
val actionTypes = inferActionTypes(collectionModel.getCommonContext());
- final Stream<ObjectAction> objectActions = objectSpec.streamDeclaredActions(actionTypes, MixedIn.INCLUDED);
+ final Stream<ObjectAction> objectActions = objectSpec.streamActions(actionTypes, MixedIn.INCLUDED);
return objectActions
.filter(ObjectAction.Predicates.associatedWithAndWithCollectionParameterFor(collection))
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
index 8a996bf..5facc87 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
@@ -124,7 +124,7 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
.filter(actionLayoutData -> actionLayoutData.getMetadataError() == null)
.filter(_NullSafe::isPresent)
.map(actionLayoutData ->
- getModel().getTypeOfSpecification().getDeclaredAction(actionLayoutData.getId()).orElse(null)
+ getModel().getTypeOfSpecification().getAction(actionLayoutData.getId()).orElse(null)
)
.filter(_NullSafe::isPresent)
.collect(Collectors.toList());