This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch CAUSEWAY-3326
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 62691cb2338d4a99c71d6b666ce86425866af228
Author: danhaywood <[email protected]>
AuthorDate: Fri Mar 15 17:23:09 2024 +0000

    CAUSEWAY-3326: injects into Specifications if required
---
 .../MustSatisfySpecificationFacetAbstract.java             | 14 ++++++--------
 .../param/parameter/ParameterAnnotationFacetFactory.java   |  2 +-
 ...ustSatisfySpecificationFacetForParameterAnnotation.java |  6 ++++--
 .../property/PropertyAnnotationFacetFactory.java           |  2 +-
 ...MustSatisfySpecificationFacetForPropertyAnnotation.java |  6 ++++--
 5 files changed, 16 insertions(+), 14 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
index 664891eb3b..3ae28f6f4e 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
 import org.apache.causeway.applib.services.factory.FactoryService;
 import org.apache.causeway.applib.services.i18n.TranslationContext;
 import org.apache.causeway.applib.services.i18n.TranslationService;
+import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.applib.spec.Specification;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.facetapi.Facet;
@@ -85,9 +86,10 @@ implements MustSatisfySpecificationFacet {
      */
     protected static Can<Specification> toSpecifications(
             final FactoryService factoryService,
-            final Class<? extends Specification>[] classes) {
+            ServiceInjector serviceInjector, final Class<? extends 
Specification>[] classes) {
         return Arrays.stream(classes)
                 .map(factoryService::getOrCreate)
+                .peek(serviceInjector::injectServicesInto)
                 .collect(Can.toCan());
     }
 
@@ -103,13 +105,9 @@ implements MustSatisfySpecificationFacet {
 
     @Override
     public boolean semanticEquals(final @NonNull Facet other) {
-        return other instanceof MustSatisfySpecificationFacetAbstract
-                ? Objects.equals(
-                        this
-                            .specifications.map(Specification::getClass),
-                        ((MustSatisfySpecificationFacetAbstract)other)
-                            .specifications.map(Specification::getClass))
-                : false;
+        return other instanceof MustSatisfySpecificationFacetAbstract &&
+            Objects.equals( this.specifications.map(Specification::getClass),
+                         ((MustSatisfySpecificationFacetAbstract) 
other).specifications.map(Specification::getClass));
     }
 
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
index d224e6f1f3..6c56b61151 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
@@ -83,7 +83,7 @@ extends FacetFactoryAbstract {
 
         addFacetIfPresent(
                 MustSatisfySpecificationFacetForParameterAnnotation
-                .create(parameterIfAny, holder, getFactoryService()));
+                .create(parameterIfAny, holder, getFactoryService(), 
getServiceInjector()));
     }
 
     void processParamsRegEx(final ProcessParameterContext 
processParameterContext) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mustsatisfy/MustSatisfySpecificationFacetForParameterAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mustsatisfy/MustSatisfySpecificationFacetForParameterAnnotation.java
index 82e4471276..6ebd35eb28 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mustsatisfy/MustSatisfySpecificationFacetForParameterAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mustsatisfy/MustSatisfySpecificationFacetForParameterAnnotation.java
@@ -22,6 +22,7 @@ import java.util.Optional;
 
 import org.apache.causeway.applib.annotation.Parameter;
 import org.apache.causeway.applib.services.factory.FactoryService;
+import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.applib.spec.Specification;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
@@ -36,11 +37,12 @@ extends MustSatisfySpecificationFacetAbstract {
     public static Optional<MustSatisfySpecificationFacet> create(
             final Optional<Parameter> parameterIfAny,
             final FacetHolder holder,
-            final FactoryService factoryService) {
+            final FactoryService factoryService,
+            final ServiceInjector serviceInjector) {
 
         val specifications = parameterIfAny
                 .map(Parameter::mustSatisfy)
-                .map(classes -> toSpecifications(factoryService, classes))
+                .map(classes -> toSpecifications(factoryService, 
serviceInjector, classes))
                 .orElseGet(Can::empty);
 
         return specifications.isEmpty()
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index a83aace192..9b681919f5 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -256,7 +256,7 @@ extends FacetFactoryAbstract {
         // search for @Property(mustSatisfy=...)
         addFacetIfPresent(
                 MustSatisfySpecificationFacetForPropertyAnnotation
-                .create(propertyIfAny, holder, getFactoryService()));
+                .create(propertyIfAny, holder, getFactoryService(), 
getServiceInjector()));
     }
 
     void processEntityPropertyChangePublishing(final ProcessMethodContext 
processMethodContext, final Optional<Property> propertyIfAny) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForPropertyAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForPropertyAnnotation.java
index 8630433753..f3be999ce6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForPropertyAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForPropertyAnnotation.java
@@ -22,6 +22,7 @@ import java.util.Optional;
 
 import org.apache.causeway.applib.annotation.Property;
 import org.apache.causeway.applib.services.factory.FactoryService;
+import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.applib.spec.Specification;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
@@ -36,11 +37,12 @@ extends MustSatisfySpecificationFacetAbstract {
     public static Optional<MustSatisfySpecificationFacet> create(
             final Optional<Property> propertyIfAny,
             final FacetHolder holder,
-            final FactoryService factoryService) {
+            final FactoryService factoryService,
+            final ServiceInjector serviceInjector) {
 
         val specifications = propertyIfAny
                 .map(Property::mustSatisfy)
-                .map(classes -> toSpecifications(factoryService, classes))
+                .map(classes -> toSpecifications(factoryService, 
serviceInjector, classes))
                 .orElseGet(Can::empty);
 
         return specifications.isEmpty()

Reply via email to