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 5a385b4bdd CAUSEWAY-3676: refactors GqlvDomainService, use GqlvAction
5a385b4bdd is described below

commit 5a385b4bdde460a8a303985df6cf2de6f9acc0e9
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 10:43:49 2024 +0000

    CAUSEWAY-3676: refactors GqlvDomainService, use GqlvAction
---
 .../graphql/model/domain/GqlvDomainService.java    | 70 +++++++++++-----------
 .../viewer/graphql/model/domain/GqlvMember.java    |  4 +-
 .../graphql/viewer/source/QueryFieldFactory.java   |  2 +-
 3 files changed, 38 insertions(+), 38 deletions(-)

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 a9d50ac7c9..5e70388021 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,6 +1,7 @@
 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;
@@ -11,6 +12,9 @@ import graphql.schema.GraphQLOutputType;
 
 import lombok.Getter;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -24,7 +28,6 @@ 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;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
@@ -64,17 +67,11 @@ public class GqlvDomainService {
     }
 
 
-    private final _BiMap<ObjectAction, GraphQLFieldDefinition> 
safeActionToField = new _BiMap<>();
-    private final _BiMap<ObjectAction, GraphQLFieldDefinition> 
mutatorActionToField = new _BiMap<>();
-
-    public Map<ObjectAction, GraphQLFieldDefinition> getSafeActions() {
-        return safeActionToField.getForwardMapAsImmutable();
-    }
-
-    Map<ObjectAction, GraphQLFieldDefinition> getMutatorActions() {
-        return mutatorActionToField.getForwardMapAsImmutable();
-    }
+    private final List<GqlvAction> safeActions = new ArrayList<>();
+    public List<GqlvAction> getSafeActions() {return 
Collections.unmodifiableList(safeActions);}
 
+    private final List<GqlvAction> mutatorActions = new ArrayList<>();
+    public List<GqlvAction> getMutatorActions() {return 
Collections.unmodifiableList(mutatorActions);}
 
     /**
      * @see #getGqlObjectType()
@@ -124,43 +121,46 @@ public class GqlvDomainService {
         gqlObjectTypeBuilder.field(fieldDefinition);
 
         // TODO: either safe or mutator
-        safeActionToField.put(objectAction, fieldDefinition);
+        safeActions.add(new GqlvAction(objectAction, fieldDefinition));
     }
 
 
-    public void addDataFetcher(
-            Map.Entry<ObjectAction, GraphQLFieldDefinition> entry) {
-
-        final ObjectAction objectAction = entry.getKey();
-        GraphQLFieldDefinition fieldDefinition = entry.getValue();
+    public void addDataFetcher(final GqlvAction gqlvAction) {
+        GraphQLFieldDefinition fieldDefinition = 
gqlvAction.getFieldDefinition();
 
         codeRegistryBuilder.dataFetcher(
                 FieldCoordinates.coordinates(getGqlObjectType(), 
fieldDefinition),
-                (DataFetcher<Object>) dataFetchingEnvironment -> {
-
-                    Object domainObjectInstance = 
dataFetchingEnvironment.getSource();
+                (DataFetcher<Object>) dataFetchingEnvironment -> 
invoke(gqlvAction, dataFetchingEnvironment)
+        );
+    }
 
-                    Class<?> domainObjectInstanceClass = 
domainObjectInstance.getClass();
-                    ObjectSpecification specification = specificationLoader
-                            .loadSpecification(domainObjectInstanceClass);
+    private Object invoke(
+            final GqlvAction gqlvAction,
+            final DataFetchingEnvironment dataFetchingEnvironment) {
+        final ObjectAction objectAction = gqlvAction.getObjectAction();
 
-                    ManagedObject owner = 
ManagedObject.adaptSingular(specification, domainObjectInstance);
+        Object domainObjectInstance = dataFetchingEnvironment.getSource();
 
-                    ActionInteractionHead actionInteractionHead = 
objectAction.interactionHead(owner);
+        Class<?> domainObjectInstanceClass = domainObjectInstance.getClass();
+        ObjectSpecification specification = specificationLoader
+                .loadSpecification(domainObjectInstanceClass);
 
-                    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 owner = ManagedObject.adaptSingular(specification, 
domainObjectInstance);
 
-                    ManagedObject managedObject = objectAction
-                            .execute(actionInteractionHead, canOfParams, 
InteractionInitiatedBy.USER);
+        ActionInteractionHead actionInteractionHead = 
objectAction.interactionHead(owner);
 
-                    return managedObject.getPojo();
+        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 6f3b2b226d..b94d93bef1 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
@@ -9,8 +9,8 @@ import graphql.schema.GraphQLFieldDefinition;
 
 public abstract class GqlvMember<T extends ObjectMember> {
 
-    @Getter final T objectMember;
-    @Getter final GraphQLFieldDefinition fieldDefinition;
+    @Getter private final T objectMember;
+    @Getter private final GraphQLFieldDefinition fieldDefinition;
 
     public GqlvMember(
             final T objectMember,
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 411b2171e1..aec733d5de 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
@@ -80,7 +80,7 @@ public class QueryFieldFactory {
 
         domainService.buildObjectGqlType();
 
-        
domainService.getSafeActions().entrySet().forEach(domainService::addDataFetcher);
+        domainService.getSafeActions().forEach(domainService::addDataFetcher);
 
         topLevelQueryStructure.addFieldFor(domainService, codeRegistryBuilder);
     }

Reply via email to