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

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

commit c469e0501fd6160a661cebc4f0d44ad7236c6448
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 17:45:27 2024 +0000

    CAUSEWAY-3676: moves responsibility from GqlvDomainService
---
 .../viewer/graphql/model/domain/GqlvAction.java    | 51 +++++++++++++++++++++-
 .../graphql/model/domain/GqlvAssociation.java      |  7 +--
 .../graphql/model/domain/GqlvCollection.java       |  8 +---
 .../graphql/model/domain/GqlvDomainObject.java     |  8 ++--
 .../graphql/model/domain/GqlvDomainService.java    | 46 -------------------
 .../viewer/graphql/model/domain/GqlvMember.java    |  3 ++
 .../viewer/graphql/model/domain/GqlvProperty.java  |  5 +--
 .../integration/GraphQlSourceForCauseway.java      |  2 +-
 8 files changed, 63 insertions(+), 67 deletions(-)

diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
index 5048fba08c..6549c53d61 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
@@ -1,10 +1,22 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
+import graphql.schema.DataFetcher;
+import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.FieldCoordinates;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 
+import java.util.Map;
+
 public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> {
 
     public GqlvAction(
@@ -12,11 +24,48 @@ public class GqlvAction extends GqlvMember<ObjectAction, 
GqlvActionHolder> {
             final ObjectAction objectAction,
             final GraphQLFieldDefinition fieldDefinition,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder
-    ) {
+            ) {
         super(holder, objectAction, fieldDefinition, codeRegistryBuilder);
     }
 
     public ObjectAction getObjectAction() {
         return getObjectMember();
     }
+
+    public void addDataFetcher() {
+
+        codeRegistryBuilder.dataFetcher(
+                FieldCoordinates.coordinates(getHolder().getGqlObjectType(), 
getFieldDefinition()),
+                this::invoke
+        );
+    }
+
+    private Object invoke(
+            final DataFetchingEnvironment dataFetchingEnvironment) {
+        final ObjectAction objectAction = getObjectAction();
+
+        Object domainObjectInstance = dataFetchingEnvironment.getSource();
+
+        Class<?> domainObjectInstanceClass = domainObjectInstance.getClass();
+        ObjectSpecification specification = specificationLoader
+                .loadSpecification(domainObjectInstanceClass);
+
+        ManagedObject owner = ManagedObject.adaptSingular(specification, 
domainObjectInstance);
+
+        ActionInteractionHead actionInteractionHead = 
objectAction.interactionHead(owner);
+
+        Map<String, Object> arguments = dataFetchingEnvironment.getArguments();
+        Can<ObjectActionParameter> parameters = objectAction.getParameters();
+        Can<ManagedObject> canOfParams = parameters
+                .map(oap -> {
+                    Object argumentValue = arguments.get(oap.getId());
+                    return ManagedObject.adaptParameter(oap, argumentValue);
+                });
+
+        ManagedObject managedObject = objectAction
+                .execute(actionInteractionHead, canOfParams, 
InteractionInitiatedBy.USER);
+
+        return managedObject.getPojo();
+    }
+
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
index 1e38e89de8..c8c08fdff9 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
@@ -15,18 +15,13 @@ import static graphql.schema.FieldCoordinates.coordinates;
 
 public abstract class GqlvAssociation<T extends ObjectAssociation, H extends 
GqlvAssociationHolder> extends GqlvMember<T, H> {
 
-
-    private final SpecificationLoader specificationLoader;
-
     public GqlvAssociation(
             final H holder,
             final T objectAssociation,
             final GraphQLFieldDefinition fieldDefinition,
-            final GraphQLCodeRegistry.Builder codeRegistryBuilder,
-            final SpecificationLoader specificationLoader
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder
             ) {
         super(holder, objectAssociation, fieldDefinition, codeRegistryBuilder);
-        this.specificationLoader = specificationLoader;
     }
 
     /**
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
index edd22e2c1a..d8aa958b08 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
@@ -12,17 +12,13 @@ public class GqlvCollection extends 
GqlvAssociation<OneToManyAssociation, GqlvCo
             final GqlvCollectionHolder domainObject,
             final OneToManyAssociation oneToManyAssociation,
             final GraphQLFieldDefinition fieldDefinition,
-            final GraphQLCodeRegistry.Builder codeRegistryBuilder,
-            final SpecificationLoader specificationLoader
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder
     ) {
-        super(domainObject, oneToManyAssociation, fieldDefinition, 
codeRegistryBuilder, specificationLoader);
+        super(domainObject, oneToManyAssociation, fieldDefinition, 
codeRegistryBuilder);
     }
 
     public OneToManyAssociation getOneToManyAssociation() {
         return getObjectAssociation();
     }
 
-    public void addDataFetcher() {
-
-    }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index 9712762d5b..d673811f8d 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -169,7 +169,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                 break;
         }
         if (fieldDefinition != null) {
-            properties.add(new GqlvProperty(this, otoa, fieldDefinition, 
codeRegistryBuilder, specificationLoader));
+            properties.add(new GqlvProperty(this, otoa, fieldDefinition, 
codeRegistryBuilder));
         }
     }
 
@@ -204,7 +204,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         }
 
         if (fieldDefinition != null) {
-            collections.add(new GqlvCollection(this, otom, fieldDefinition, 
codeRegistryBuilder, specificationLoader));
+            collections.add(new GqlvCollection(this, otom, fieldDefinition, 
codeRegistryBuilder));
         }
     }
 
@@ -329,11 +329,11 @@ public class GqlvDomainObject implements 
GqlvActionHolder, GqlvPropertyHolder, G
     }
 
     public void addDataFetchersForProperties() {
-        getProperties().forEach(property -> property.addDataFetcher());
+        getProperties().forEach(GqlvAssociation::addDataFetcher);
     }
 
     public void addDataFetchersForCollections() {
-        getCollections().forEach(collection -> collection.addDataFetcher());
+        getCollections().forEach(GqlvCollection::addDataFetcher);
     }
 
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
index ddbf1159fb..35a15d9b95 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
@@ -1,8 +1,5 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import graphql.schema.DataFetcher;
-import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.FieldCoordinates;
 import graphql.schema.GraphQLArgument;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
@@ -15,16 +12,10 @@ import lombok.Getter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
-import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 import org.apache.causeway.viewer.graphql.model.util._LTN;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
@@ -125,42 +116,5 @@ public class GqlvDomainService implements GqlvActionHolder 
{
     }
 
 
-    public void addDataFetcher(final GqlvAction gqlvAction) {
-        GraphQLFieldDefinition fieldDefinition = 
gqlvAction.getFieldDefinition();
-
-        codeRegistryBuilder.dataFetcher(
-                FieldCoordinates.coordinates(getGqlObjectType(), 
fieldDefinition),
-                (DataFetcher<Object>) dataFetchingEnvironment -> 
invoke(gqlvAction, dataFetchingEnvironment)
-        );
-    }
-
-    private Object invoke(
-            final GqlvAction gqlvAction,
-            final DataFetchingEnvironment dataFetchingEnvironment) {
-        final ObjectAction objectAction = gqlvAction.getObjectAction();
-
-        Object domainObjectInstance = dataFetchingEnvironment.getSource();
-
-        Class<?> domainObjectInstanceClass = domainObjectInstance.getClass();
-        ObjectSpecification specification = specificationLoader
-                .loadSpecification(domainObjectInstanceClass);
-
-        ManagedObject owner = ManagedObject.adaptSingular(specification, 
domainObjectInstance);
-
-        ActionInteractionHead actionInteractionHead = 
objectAction.interactionHead(owner);
-
-        Map<String, Object> arguments = dataFetchingEnvironment.getArguments();
-        Can<ObjectActionParameter> parameters = objectAction.getParameters();
-        Can<ManagedObject> canOfParams = parameters
-                .map(oap -> {
-                    Object argumentValue = arguments.get(oap.getId());
-                    return ManagedObject.adaptParameter(oap, argumentValue);
-                });
-
-        ManagedObject managedObject = objectAction
-                .execute(actionInteractionHead, canOfParams, 
InteractionInitiatedBy.USER);
-
-        return managedObject.getPojo();
-    }
 
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
index ee0179dedf..3db8cf753c 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
@@ -1,6 +1,7 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
 import graphql.schema.GraphQLCodeRegistry;
 
@@ -14,6 +15,7 @@ public abstract class GqlvMember<T extends ObjectMember, H 
extends GqlvMemberHol
     @Getter private final T objectMember;
     @Getter private final GraphQLFieldDefinition fieldDefinition;
     final GraphQLCodeRegistry.Builder codeRegistryBuilder;
+    final SpecificationLoader specificationLoader;
 
     public GqlvMember(
             final H holder,
@@ -25,6 +27,7 @@ public abstract class GqlvMember<T extends ObjectMember, H 
extends GqlvMemberHol
         this.objectMember = objectMember;
         this.fieldDefinition = fieldDefinition;
         this.codeRegistryBuilder = codeRegistryBuilder;
+        this.specificationLoader = objectMember.getSpecificationLoader();
     }
 
     public String getId() {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
index a58b926ada..c9e11c0be1 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
@@ -12,10 +12,9 @@ public class GqlvProperty extends 
GqlvAssociation<OneToOneAssociation, GqlvPrope
             final GqlvPropertyHolder domainObject,
             final OneToOneAssociation oneToOneAssociation,
             final GraphQLFieldDefinition fieldDefinition,
-            final GraphQLCodeRegistry.Builder codeRegistryBuilder,
-            final SpecificationLoader specificationLoader
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder
     ) {
-        super(domainObject, oneToOneAssociation, fieldDefinition, 
codeRegistryBuilder, specificationLoader);
+        super(domainObject, oneToOneAssociation, fieldDefinition, 
codeRegistryBuilder);
     }
 
     public OneToOneAssociation getOneToOneAssociation() {
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 5693f6a8fa..dba564d034 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -186,7 +186,7 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
 
         domainService.buildObjectGqlType();
 
-        domainService.getSafeActions().forEach(domainService::addDataFetcher);
+        domainService.getSafeActions().forEach(gqlvAction -> 
gqlvAction.addDataFetcher());
 
         topLevelQueryStructure.addFieldFor(domainService, codeRegistryBuilder);
     }

Reply via email to