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 33583bd3c1 CAUSEWAY-3676: adds maps to ObjectStructure
33583bd3c1 is described below

commit 33583bd3c166745062b0e8f57b6c2602bcc428cc
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 16:14:36 2024 +0000

    CAUSEWAY-3676: adds maps to ObjectStructure
---
 .../graphql/viewer/source/GqlvObjectStructure.java | 65 +++++++++++++++-------
 1 file changed, 44 insertions(+), 21 deletions(-)

diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
index f9c97fffac..c40d9d3087 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
@@ -16,7 +16,9 @@ import lombok.experimental.UtilityClass;
 import lombok.val;
 
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -88,7 +90,11 @@ public class GqlvObjectStructure {
     }
 
     final GraphQLObjectType.Builder mutatorsTypeBuilder;
-    final List<GraphQLFieldDefinition> mutatorsTypeFields = new ArrayList<>();
+
+    private final Map<OneToOneAssociation, GraphQLFieldDefinition> 
propertyToField = new LinkedHashMap<>();
+    private final Map<OneToManyAssociation, GraphQLFieldDefinition> 
collectionToField = new LinkedHashMap<>();
+    private final Map<ObjectAction, GraphQLFieldDefinition> safeActionToField 
= new LinkedHashMap<>();
+    private final Map<ObjectAction, GraphQLFieldDefinition> 
mutatorActionToField = new LinkedHashMap<>();
 
     /**
      * Built using {@link #buildGqlObjectType()}
@@ -137,18 +143,22 @@ public class GqlvObjectStructure {
         
objectSpec.streamProperties(MixedIn.INCLUDED).forEach(this::addPropertyAsField);
     }
 
+
     private void addPropertyAsField(final OneToOneAssociation otoa) {
         ObjectSpecification otoaObjectSpec = otoa.getElementType();
+
+        GraphQLFieldDefinition fieldDefinition = null;
         switch (otoaObjectSpec.getBeanSort()) {
 
             case VIEW_MODEL:
             case ENTITY:
 
                 GraphQLTypeReference fieldTypeRef = 
typeRef(_LTN.sanitized(otoaObjectSpec));
+                fieldDefinition = newFieldDefinition()
+                        .name(otoa.getId())
+                        .type(otoa.isOptional() ? fieldTypeRef : 
nonNull(fieldTypeRef)).build();
                 getGqlObjectTypeBuilder().field(
-                        newFieldDefinition()
-                            .name(otoa.getId())
-                            .type(otoa.isOptional() ? fieldTypeRef : 
nonNull(fieldTypeRef))
+                        fieldDefinition
                         );
 
                 break;
@@ -162,10 +172,14 @@ public class GqlvObjectStructure {
                         .type(otoa.isOptional()
                                 ? Scalars.GraphQLString
                                 : nonNull(Scalars.GraphQLString));
-                getGqlObjectTypeBuilder().field(valueBuilder);
+                fieldDefinition = valueBuilder.build();
+                getGqlObjectTypeBuilder().field(fieldDefinition);
 
                 break;
         }
+        if (fieldDefinition != null) {
+            propertyToField.put(otoa, fieldDefinition);
+        }
     }
 
 
@@ -176,27 +190,31 @@ public class GqlvObjectStructure {
     private void addCollection(OneToManyAssociation otom) {
 
         ObjectSpecification elementType = otom.getElementType();
+        GraphQLFieldDefinition fieldDefinition = null;
+
         switch (elementType.getBeanSort()) {
 
             case VIEW_MODEL:
             case ENTITY:
                 GraphQLTypeReference typeRef = 
typeRef(_LTN.sanitized(elementType));
-                gqlObjectTypeBuilder.field(
-                        newFieldDefinition()
-                            .name(otom.getId())
-                            .type(GraphQLList.list(typeRef))
-                        );
+                fieldDefinition = newFieldDefinition()
+                        .name(otom.getId())
+                        .type(GraphQLList.list(typeRef)).build();
+                gqlObjectTypeBuilder.field(fieldDefinition);
                 break;
 
             case VALUE:
                 GraphQLType wrappedType = 
TypeMapper.typeFor(elementType.getCorrespondingClass());
-                gqlObjectTypeBuilder.field(
-                        newFieldDefinition()
-                            .name(otom.getId())
-                            .type(GraphQLList.list(wrappedType))
-                        );
+                fieldDefinition = newFieldDefinition()
+                        .name(otom.getId())
+                        .type(GraphQLList.list(wrappedType)).build();
+                gqlObjectTypeBuilder.field(fieldDefinition);
                 break;
         }
+
+        if (fieldDefinition != null) {
+            collectionToField.put(otom, fieldDefinition);
+        }
     }
 
 
@@ -211,9 +229,9 @@ public class GqlvObjectStructure {
         GraphQLFieldDefinition fieldDefinition = fieldBuilder.build();
 
         if (objectAction.getSemantics().isSafeInNature()) {
-            addSafeActionAsField(fieldDefinition);
+            addSafeActionAsField(objectAction, fieldDefinition);
         } else {
-            addNonSafeActionAsMutatorField(fieldDefinition);
+            addNonSafeActionAsMutatorField(objectAction, fieldDefinition);
         }
     }
 
@@ -240,17 +258,22 @@ public class GqlvObjectStructure {
     }
 
 
-    public void addSafeActionAsField(GraphQLFieldDefinition fieldDefinition) {
+    public void addSafeActionAsField(
+            final ObjectAction objectAction,
+            final GraphQLFieldDefinition fieldDefinition) {
         getGqlObjectTypeBuilder().field(fieldDefinition);
+        safeActionToField.put(objectAction, fieldDefinition);
     }
 
-    public void addNonSafeActionAsMutatorField(GraphQLFieldDefinition 
fieldDefinition) {
+    public void addNonSafeActionAsMutatorField(
+            final ObjectAction objectAction,
+            final GraphQLFieldDefinition fieldDefinition) {
         mutatorsTypeBuilder.field(fieldDefinition);
-        mutatorsTypeFields.add(fieldDefinition);
+        mutatorActionToField.put(objectAction, fieldDefinition);
     }
 
     boolean hasMutators() {
-        return !mutatorsTypeFields.isEmpty();
+        return !mutatorActionToField.isEmpty();
     }
 
 

Reply via email to