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; } });
