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 9b9b711acac5944f2eb80b4d2920976188a03169
Author: danhaywood <[email protected]>
AuthorDate: Thu Feb 22 20:28:50 2024 +0000

    CAUSEWAY-3676: ok, works.
---
 .../graphql/model/domain/GqlvAbstractCustom.java   |  2 +-
 .../graphql/model/domain/GqlvScenarioStep.java     |  7 ++++-
 .../domain/common/query/GqlvDomainObject.java      | 34 +++++++++++++++-------
 .../query/GqlvTopLevelQueryAbstractSchema.java     |  7 +++--
 4 files changed, 35 insertions(+), 15 deletions(-)

diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java
index c2624ba185..d7888c3046 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java
@@ -72,7 +72,7 @@ public abstract class GqlvAbstractCustom extends GqlvAbstract 
implements Parent
         return hasField;
     }
 
-    void addChildField(GraphQLFieldDefinition childField) {
+    protected void addChildField(GraphQLFieldDefinition childField) {
         if (isBuilt()) {
             // the type was built already
             return;
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
index 22ebf3f7fe..8cd09bdc59 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
@@ -6,6 +6,8 @@ import java.util.Objects;
 
 import graphql.schema.DataFetchingEnvironment;
 
+import lombok.val;
+
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
@@ -37,7 +39,9 @@ public class GqlvScenarioStep
                 case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
                 case ENTITY:     // @DomainObject(nature=ENTITY)
 
-                    
domainObjects.add(addChildFieldFor(schemaStrategy.domainObjectFor(objectSpec, 
context)));
+                    val gqlvDomainObject = 
schemaStrategy.domainObjectFor(objectSpec, context);
+                    addChildField(gqlvDomainObject.newField());
+                    domainObjects.add(gqlvDomainObject);
 
                     break;
             }
@@ -54,6 +58,7 @@ public class GqlvScenarioStep
     }
 
 
+
     protected void addDataFetchersForChildren() {
         domainServices.forEach(domainService -> {
             boolean actionsAdded = domainService.hasActions();
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java
index 615a8a2581..ec7022750d 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java
@@ -37,6 +37,7 @@ import 
org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+import org.apache.causeway.viewer.graphql.model.domain.Parent;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
@@ -82,11 +83,6 @@ public class GqlvDomainObject
         this.schemaStrategy = schemaStrategy;
         this.objectSpecification = objectSpecification;
 
-        if(isBuilt()) {
-            this.meta = null;
-            this.gqlInputObjectType = null;
-            return;
-        }
         gqlObjectTypeBuilder.description(objectSpecification.getDescription());
 
         addChildFieldFor(this.meta = schemaStrategy.newGqlvMeta(this, 
context));
@@ -114,7 +110,8 @@ public class GqlvDomainObject
         ;
         gqlInputObjectType = inputObjectTypeBuilder.build();
 
-        setField(buildFieldDefinition(gqlInputObjectType));
+        // hmm..
+        setField(newField());
 
         addMembers();
 
@@ -125,14 +122,31 @@ public class GqlvDomainObject
 
     }
 
-    private GraphQLFieldDefinition buildFieldDefinition(final 
GraphQLInputObjectType gqlInputObjectType) {
+    public GraphQLFieldDefinition newField(
+            final String fieldName,
+            final String description) {
+        return buildFieldDefinition(fieldName, gqlInputObjectType);
+    }
+
+    public GraphQLFieldDefinition newField() {
+
+        // add domain object lookup to top-level query
         val lookupConfig = 
this.context.causewayConfiguration.getViewer().getGraphql().getLookup();
-        val objectSpec = getObjectSpecification();
         val fieldName = String.format("%s%s%s",
-                lookupConfig.getFieldNamePrefix(),          // eg 
"_gqlv_lookup__"
-                TypeNames.objectTypeFieldNameFor(objectSpec),
+                lookupConfig.getFieldNamePrefix(),  // eg "_gqlv_lookup__"
+                TypeNames.objectTypeFieldNameFor(objectSpecification),
                 lookupConfig.getFieldNameSuffix());
 
+        return buildFieldDefinition(fieldName, gqlInputObjectType);
+    }
+
+    private GraphQLFieldDefinition buildFieldDefinition(
+            final String fieldName,
+            final GraphQLInputObjectType gqlInputObjectType
+    ) {
+        val lookupConfig = 
this.context.causewayConfiguration.getViewer().getGraphql().getLookup();
+        val objectSpec = getObjectSpecification();
+
         return newFieldDefinition()
                 .name(fieldName)
                 .type(this.context.typeMapper.outputTypeFor(objectSpec, 
getSchemaType()))
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvTopLevelQueryAbstractSchema.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvTopLevelQueryAbstractSchema.java
index 12536788f4..a56d4464b6 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvTopLevelQueryAbstractSchema.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvTopLevelQueryAbstractSchema.java
@@ -10,6 +10,7 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
+import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
 
 import lombok.Getter;
@@ -30,7 +31,6 @@ public abstract class GqlvTopLevelQueryAbstractSchema
         super(schemaStrategy.getSchemaType().name() + "Schema", context);
         this.schemaStrategy = schemaStrategy;
 
-        // add domain object lookup to top-level query
         context.objectSpecifications().forEach(objectSpec -> {
             switch (objectSpec.getBeanSort()) {
 
@@ -38,8 +38,9 @@ public abstract class GqlvTopLevelQueryAbstractSchema
                 case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
                 case ENTITY:     // @DomainObject(nature=ENTITY)
 
-                    
domainObjects.add(addChildFieldFor(schemaStrategy.domainObjectFor(objectSpec, 
context)));
-
+                    val gqlvDomainObject = 
schemaStrategy.domainObjectFor(objectSpec, context);
+                    addChildField(gqlvDomainObject.newField());
+                    domainObjects.add(gqlvDomainObject);
                     break;
             }
         });

Reply via email to