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 0838875ab8 CAUSEWAY-3676: simplifies
0838875ab8 is described below

commit 0838875ab8911fc1aff0fe7afaf7b59c4bb93c6b
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 17:45:30 2024 +0000

    CAUSEWAY-3676: simplifies
---
 .../viewer/source/GqlvServiceStructure.java        | 74 +++++++++++++++++-----
 .../graphql/viewer/source/QueryFieldFactory.java   | 62 +-----------------
 2 files changed, 61 insertions(+), 75 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/GqlvServiceStructure.java
index 126f1a2817..a24a714d39 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/GqlvServiceStructure.java
@@ -1,6 +1,10 @@
 package org.apache.causeway.viewer.graphql.viewer.source;
 
+import graphql.schema.DataFetcher;
+import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.FieldCoordinates;
 import graphql.schema.GraphQLArgument;
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
@@ -12,8 +16,14 @@ import lombok.val;
 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.viewer.util._BiMap;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -23,6 +33,7 @@ public class GqlvServiceStructure {
 
     @Getter private final ObjectSpecification serviceSpec;
     @Getter private final GqlvTopLevelQueryStructure topLevelQueryStructure;
+    private final SpecificationLoader specificationLoader;
 
     private GraphQLFieldDefinition topLevelQueryField;
 
@@ -35,24 +46,23 @@ public class GqlvServiceStructure {
         return _LTN.sanitized(serviceSpec);
     }
 
+    private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
     private final GraphQLObjectType.Builder queryBuilder;
 
-    private GraphQLObjectType.Builder gqlObjectTypeBuilder;
-
     private GraphQLObjectType gqlObjectType;
 
-    // TODO - don't expose
-    public GraphQLObjectType.Builder getGraphQlTypeBuilder() {
-        return gqlObjectTypeBuilder;
-    }
-
-    public GqlvServiceStructure(ObjectSpecification serviceSpec, 
GqlvTopLevelQueryStructure topLevelQueryStructure) {
+    public GqlvServiceStructure(
+            final ObjectSpecification serviceSpec,
+            final GqlvTopLevelQueryStructure topLevelQueryStructure,
+            final SpecificationLoader specificationLoader
+    ) {
         this.serviceSpec = serviceSpec;
         this.topLevelQueryStructure = topLevelQueryStructure;
 
-        queryBuilder = topLevelQueryStructure.getQueryBuilder();
+        this.gqlObjectTypeBuilder = 
newObject().name(_LTN.sanitized(serviceSpec));
 
-        gqlObjectTypeBuilder = newObject().name(_LTN.sanitized(serviceSpec));
+        this.queryBuilder = topLevelQueryStructure.getQueryBuilder();
+        this.specificationLoader = specificationLoader;
     }
 
 
@@ -69,7 +79,6 @@ public class GqlvServiceStructure {
     }
 
 
-
     /**
      * @see #getGqlObjectType()
      */
@@ -101,7 +110,7 @@ public class GqlvServiceStructure {
         }
         topLevelQueryField = newFieldDefinition()
                 .name(_LTN.sanitized(serviceSpec))
-                .type(getGraphQlTypeBuilder())
+                .type(gqlObjectTypeBuilder)
                 .build();
         queryBuilder.field(topLevelQueryField);
         return topLevelQueryField;
@@ -121,8 +130,6 @@ public class GqlvServiceStructure {
 
     void addAction(final ObjectAction objectAction) {
 
-        val serviceAsGraphQlType = getGraphQlTypeBuilder();
-
         String fieldName = objectAction.getId();
 
         GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition()
@@ -136,6 +143,43 @@ public class GqlvServiceStructure {
                             .build())
                     .collect(Collectors.toList()));
         }
-        serviceAsGraphQlType.field(fieldBuilder.build());
+        gqlObjectTypeBuilder.field(fieldBuilder.build());
+    }
+
+
+    void addBehaviour(
+            final ObjectAction objectAction,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
+
+        final GraphQLObjectType graphQLObjectType = getGqlObjectType();
+
+        String fieldName = objectAction.getId();
+        codeRegistryBuilder.dataFetcher(
+            FieldCoordinates.coordinates(graphQLObjectType, fieldName),
+            (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/QueryFieldFactory.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
index edb9c3b227..2ac81d0693 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
@@ -22,7 +22,6 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
@@ -30,23 +29,15 @@ import javax.inject.Inject;
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.services.registry.ServiceRegistry;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
-import 
org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
-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.MixedIn;
 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 graphql.schema.GraphQLObjectType;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -76,27 +67,21 @@ public class QueryFieldFactory {
             final GqlvTopLevelQueryStructure topLevelQueryStructure,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
 
-        val gqlvServiceStructure = new GqlvServiceStructure(serviceSpec, 
topLevelQueryStructure);
+        val gqlvServiceStructure = new GqlvServiceStructure(serviceSpec, 
topLevelQueryStructure, specificationLoader);
 
         List<ObjectAction> objectActionList = 
serviceSpec.streamRuntimeActions(MixedIn.INCLUDED)
                 .map(ObjectAction.class::cast)
-                .filter((final ObjectAction x) -> 
x.containsFacet(ActionSemanticsFacet.class))
                 .collect(Collectors.toList());
 
         if (objectActionList.isEmpty()) {
             return;
         }
 
-        val serviceAsGraphQlType = 
gqlvServiceStructure.getGraphQlTypeBuilder();
-
         objectActionList.forEach(gqlvServiceStructure::addAction);
 
         gqlvServiceStructure.buildObjectGqlType();
 
-        objectActionList
-        .forEach(objectAction -> {
-            addBehaviour(gqlvServiceStructure, objectAction, 
codeRegistryBuilder);
-        });
+        objectActionList.forEach(objectAction -> 
gqlvServiceStructure.addBehaviour(objectAction, codeRegistryBuilder));
 
         GraphQLFieldDefinition topLevelQueryField = 
gqlvServiceStructure.addTopLevelQueryField();
 
@@ -105,47 +90,4 @@ public class QueryFieldFactory {
                 (DataFetcher<Object>) environment -> service);
     }
 
-    private void addBehaviour(
-            final GqlvServiceStructure gqlvServiceStructure,
-            final ObjectAction objectAction,
-            final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
-
-        final GraphQLObjectType graphQLObjectType = 
gqlvServiceStructure.getGqlObjectType();
-
-        String fieldName = objectAction.getId();
-        codeRegistryBuilder
-        .dataFetcher(
-            FieldCoordinates.coordinates(graphQLObjectType, fieldName),
-            new DataFetcher<Object>() {
-
-                @Override
-                public Object get(final DataFetchingEnvironment 
dataFetchingEnvironment) throws Exception {
-
-                    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();
-                }
-
-            });
-    }
-
 }

Reply via email to