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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 2ef8bc88eb CAUSEWAY-3697: wire up filter SPI
2ef8bc88eb is described below
commit 2ef8bc88eb85c6fbab7b181f737f60682e0bf2d8
Author: Andi Huber <[email protected]>
AuthorDate: Thu Mar 14 12:52:23 2024 +0100
CAUSEWAY-3697: wire up filter SPI
---
.../domainservice/DomainServiceFacetAbstract.java | 4 +--
.../DomainServiceFacetAnnotationFactory.java | 32 +++++++++++++++++++---
.../DomainServiceFacetForAnnotation.java | 30 +++++++++++---------
3 files changed, 47 insertions(+), 19 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
index 690210f276..e546cb9e86 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
@@ -42,9 +42,9 @@ implements DomainServiceFacet {
private final boolean contributingToWebApi;
public DomainServiceFacetAbstract(
- final @NonNull FacetHolder facetHolder,
final boolean contributingToUi,
- final boolean contributingToWebApi) {
+ final boolean contributingToWebApi,
+ final @NonNull FacetHolder facetHolder) {
super(DomainServiceFacetAbstract.type(), facetHolder);
this.contributingToUi = contributingToUi;
this.contributingToWebApi = contributingToWebApi;
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
index beb88ce9f8..38af74c7f0 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
@@ -18,18 +18,24 @@
*/
package
org.apache.causeway.core.metamodel.facets.object.domainservice.annotation;
+import java.util.List;
import java.util.stream.Collectors;
-import javax.inject.Inject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import org.apache.causeway.applib.annotation.DomainService;
+import org.apache.causeway.applib.id.LogicalType;
+import
org.apache.causeway.applib.services.scope.ActionContributionFilterService;
import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.base._Casts;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
import
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet;
import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
import
org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;
@@ -40,9 +46,20 @@ public class DomainServiceFacetAnnotationFactory
extends FacetFactoryAbstract
implements MetaModelRefiner {
- @Inject
+ private final Can<ActionContributionFilterService>
actionContributionFilterServices;
+
+ @Component
+ public static class FilterHolder {
+ @Autowired(required = false)
+ List<ActionContributionFilterService> actionContributionFilterServices;
+ Can<ActionContributionFilterService> toCan() {
+ return Can.ofCollection(actionContributionFilterServices);
+ }
+ }
+
public DomainServiceFacetAnnotationFactory(final MetaModelContext mmc) {
super(mmc, FeatureType.OBJECTS_ONLY);
+ this.actionContributionFilterServices =
mmc.getServiceInjector().injectServicesInto(new FilterHolder()).toCan();
}
@Override
@@ -51,11 +68,18 @@ implements MetaModelRefiner {
if (!domainServiceIfAny.isPresent()) {
return;
}
+
val facetHolder = processClassContext.getFacetHolder();
+
+ val logicalType = _Casts.castTo(ObjectSpecification.class, facetHolder)
+ .map(ObjectSpecification::getLogicalType)
+
.orElseGet(()->LogicalType.fqcn(processClassContext.getCls())); // JUnit support
+
addFacet(
new DomainServiceFacetForAnnotation(
- facetHolder,
- Can.empty())); //TODO[CAUSEWAY-3697] provide services
+ logicalType,
+ actionContributionFilterServices,
+ facetHolder));
addFacetIfPresent(
AliasedFacetForDomainServiceAnnotation
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
index 1352984e3f..671d05a5fc 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
@@ -18,36 +18,40 @@
*/
package
org.apache.causeway.core.metamodel.facets.object.domainservice.annotation;
+import org.apache.causeway.applib.id.LogicalType;
import
org.apache.causeway.applib.services.scope.ActionContributionFilterService;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacetAbstract;
-import lombok.NonNull;
-
public class DomainServiceFacetForAnnotation
extends DomainServiceFacetAbstract {
public DomainServiceFacetForAnnotation(
- final @NonNull FacetHolder facetHolder,
- final @NonNull Can<ActionContributionFilterService>
filterServices) {
- super(facetHolder,
- evaluateIsContributingToUi(filterServices),
- evaluateIsContributingToWebApi(filterServices));
+ final LogicalType logicalType,
+ final Can<ActionContributionFilterService> filterServices,
+ final FacetHolder holder) {
+ super(evaluateIsContributingToUi(logicalType, filterServices),
+ evaluateIsContributingToWebApi(logicalType, filterServices),
+ holder);
}
// -- HELPER
- private static boolean evaluateIsContributingToWebApi(
+ private static boolean evaluateIsContributingToUi(
+ final LogicalType logicalType,
final Can<ActionContributionFilterService> filterServices) {
- // TODO[CAUSEWAY-3697] honor filterServices
- return true;
+ var veto = filterServices.stream()
+ .anyMatch(spi->!spi.isContributingToUi(logicalType));
+ return !veto;
}
- private static boolean evaluateIsContributingToUi(
+ private static boolean evaluateIsContributingToWebApi(
+ final LogicalType logicalType,
final Can<ActionContributionFilterService> filterServices) {
- // TODO[CAUSEWAY-3697] honor filterServices
- return true;
+ var veto = filterServices.stream()
+ .anyMatch(spi->!spi.isContributingToWebApi(logicalType));
+ return !veto;
}
}