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


The following commit(s) were added to refs/heads/CAUSEWAY-3676 by this push:
     new ab56ab5ed3 CAUSEWAY-3676: combines GqlvServiceStructure and Behaviour 
into GqlvDomainService
ab56ab5ed3 is described below

commit ab56ab5ed309d3132955866d89f091d65a02efe9
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 10:37:59 2024 +0000

    CAUSEWAY-3676: combines GqlvServiceStructure and Behaviour into 
GqlvDomainService
---
 ...erviceStructure.java => GqlvDomainService.java} | 60 ++++++++++++++++++-
 .../viewer/source/GqlvServiceBehaviour.java        | 68 ----------------------
 .../viewer/source/GqlvTopLevelQueryStructure.java  |  9 ++-
 .../graphql/viewer/source/QueryFieldFactory.java   | 12 ++--
 4 files changed, 66 insertions(+), 83 deletions(-)

diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvDomainService.java
similarity index 55%
rename from 
incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
rename to 
incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvDomainService.java
index 7f792cec9a..badded558e 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvDomainService.java
@@ -1,6 +1,9 @@
 package org.apache.causeway.viewer.graphql.viewer.source;
 
+import graphql.schema.DataFetcher;
+import graphql.schema.FieldCoordinates;
 import graphql.schema.GraphQLArgument;
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
@@ -11,8 +14,14 @@ import lombok.Getter;
 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;
 import org.apache.causeway.viewer.graphql.model.util._BiMap;
@@ -20,9 +29,12 @@ import org.apache.causeway.viewer.graphql.model.util._BiMap;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
-public class GqlvServiceStructure {
+public class GqlvDomainService {
 
-    @Getter private final ObjectSpecification serviceSpec;
+    private final ObjectSpecification serviceSpec;
+    @Getter private final Object pojo;
+    private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
+    private final SpecificationLoader specificationLoader;
 
 
     private String getLogicalTypeName() {
@@ -37,9 +49,16 @@ public class GqlvServiceStructure {
 
     private GraphQLObjectType gqlObjectType;
 
-    public GqlvServiceStructure(final ObjectSpecification serviceSpec
+    public GqlvDomainService(
+            final ObjectSpecification serviceSpec,
+            final Object pojo,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+            final SpecificationLoader specificationLoader
     ) {
         this.serviceSpec = serviceSpec;
+        this.pojo = pojo;
+        this.codeRegistryBuilder = codeRegistryBuilder;
+        this.specificationLoader = specificationLoader;
 
         this.gqlObjectTypeBuilder = 
newObject().name(_LTN.sanitized(serviceSpec));
     }
@@ -110,4 +129,39 @@ public class GqlvServiceStructure {
     }
 
 
+    public void addDataFetcher(
+            Map.Entry<ObjectAction, GraphQLFieldDefinition> entry) {
+
+        final ObjectAction objectAction = entry.getKey();
+        GraphQLFieldDefinition fieldDefinition = entry.getValue();
+
+        codeRegistryBuilder.dataFetcher(
+                FieldCoordinates.coordinates(getGqlObjectType(), 
fieldDefinition),
+                (DataFetcher<Object>) dataFetchingEnvironment -> {
+
+                    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/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
deleted file mode 100644
index 454aa2b20e..0000000000
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.apache.causeway.viewer.graphql.viewer.source;
-
-import graphql.schema.DataFetcher;
-import graphql.schema.FieldCoordinates;
-import graphql.schema.GraphQLCodeRegistry;
-
-import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLObjectType;
-
-import lombok.RequiredArgsConstructor;
-
-import java.util.Map;
-
-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;
-
-@RequiredArgsConstructor
-public class GqlvServiceBehaviour {
-
-    private final GqlvServiceStructure structure;
-    final Object service;
-    private final SpecificationLoader specificationLoader;
-    private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
-
-
-    public void addDataFetcher(
-            Map.Entry<ObjectAction, GraphQLFieldDefinition> entry) {
-
-        final ObjectAction objectAction = entry.getKey();
-        GraphQLFieldDefinition fieldDefinition = entry.getValue();
-
-        final GraphQLObjectType graphQLObjectType = 
structure.getGqlObjectType();
-
-        codeRegistryBuilder.dataFetcher(
-                FieldCoordinates.coordinates(graphQLObjectType, 
fieldDefinition),
-                (DataFetcher<Object>) dataFetchingEnvironment -> {
-
-                    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/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
index e813aa5a7b..caa002ac80 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
@@ -55,17 +55,16 @@ public class GqlvTopLevelQueryStructure {
     }
 
     public void addFieldFor(
-            final GqlvServiceStructure serviceStructure,
-            final GqlvServiceBehaviour serviceBehaviour,
+            final GqlvDomainService domainService,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
 
-        GraphQLFieldDefinition topLevelQueryField = 
serviceStructure.createTopLevelQueryField();
-        queryBuilder.field(serviceStructure.createTopLevelQueryField());
+        GraphQLFieldDefinition topLevelQueryField = 
domainService.createTopLevelQueryField();
+        queryBuilder.field(domainService.createTopLevelQueryField());
 
         codeRegistryBuilder.dataFetcher(
                 // TODO: it would be nice to make these typesafe...
                 FieldCoordinates.coordinates("Query", 
topLevelQueryField.getName()),
-                (DataFetcher<Object>) environment -> serviceBehaviour.service);
+                (DataFetcher<Object>) environment -> domainService.getPojo());
 
     }
 }
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
index 90a46133c1..99ab50c1e5 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
@@ -64,7 +64,7 @@ public class QueryFieldFactory {
             final GqlvTopLevelQueryStructure topLevelQueryStructure,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
 
-        val serviceStructure = new GqlvServiceStructure(serviceSpec);
+        val domainService = new GqlvDomainService(serviceSpec, service, 
codeRegistryBuilder, specificationLoader);
 
         List<ObjectAction> objectActionList = 
serviceSpec.streamRuntimeActions(MixedIn.INCLUDED)
                 .map(ObjectAction.class::cast)
@@ -74,15 +74,13 @@ public class QueryFieldFactory {
             return;
         }
 
-        objectActionList.forEach(serviceStructure::addAction);
+        objectActionList.forEach(domainService::addAction);
 
-        serviceStructure.buildObjectGqlType();
+        domainService.buildObjectGqlType();
 
-        GqlvServiceBehaviour serviceBehaviour = new 
GqlvServiceBehaviour(serviceStructure, service, specificationLoader, 
codeRegistryBuilder);
+        
domainService.getSafeActions().entrySet().forEach(domainService::addDataFetcher);
 
-        
serviceStructure.getSafeActions().entrySet().forEach(serviceBehaviour::addDataFetcher);
-
-        topLevelQueryStructure.addFieldFor(serviceStructure, serviceBehaviour, 
codeRegistryBuilder);
+        topLevelQueryStructure.addFieldFor(domainService, codeRegistryBuilder);
     }
 
 }

Reply via email to