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 95cd298dfbc33744b924250ca5b159c52f3318bf Author: danhaywood <[email protected]> AuthorDate: Sat Jan 20 18:38:30 2024 +0000 CAUSEWAY-3676: moves responsibility to creating fieldDefinition into GqlvAction --- .../viewer/graphql/model/domain/GqlvAction.java | 28 ++++++++++++++++++---- .../graphql/model/domain/GqlvDomainObject.java | 18 ++------------ .../graphql/model/domain/GqlvDomainService.java | 12 +++++----- .../viewer/graphql/model/domain/GqlvMutators.java | 2 +- .../test/e2e/Schema_IntegTest.schema.approved.json | 20 +++++++++++----- .../graphql/test/src/test/resources/schema.gql | 4 ++-- 6 files changed, 49 insertions(+), 35 deletions(-) diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java index 07e920e4a2..7b3811658b 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java @@ -7,30 +7,50 @@ 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.model.types.TypeMapper; -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; +import graphql.schema.GraphQLOutputType; + +import lombok.val; import java.util.Map; import java.util.stream.Collectors; +import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLNonNull.nonNull; public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> { + private final GraphQLObjectType.Builder objectTypeBuilder; + public GqlvAction( final GqlvActionHolder holder, final ObjectAction objectAction, - final GraphQLFieldDefinition fieldDefinition, + final GraphQLObjectType.Builder objectTypeBuilder, final GraphQLCodeRegistry.Builder codeRegistryBuilder ) { - super(holder, objectAction, fieldDefinition, codeRegistryBuilder); + super(holder, objectAction, fieldDefinition(objectAction, objectTypeBuilder), codeRegistryBuilder); + this.objectTypeBuilder = objectTypeBuilder; + } + + private static GraphQLFieldDefinition fieldDefinition( + final ObjectAction objectAction, + final GraphQLObjectType.Builder objectTypeBuilder) { + val fieldName = objectAction.getId(); + GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition() + .name(fieldName) + .type((GraphQLOutputType) TypeMapper.typeForObjectAction(objectAction)); + addGqlArguments(objectAction, fieldBuilder); + GraphQLFieldDefinition fieldDefinition = fieldBuilder.build(); + + objectTypeBuilder.field(fieldDefinition); + return fieldDefinition; } public ObjectAction getObjectAction() { diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java index 35d9a9a98f..5fa061b1bb 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java @@ -5,17 +5,14 @@ import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import org.apache.causeway.applib.services.bookmark.BookmarkService; import org.apache.causeway.applib.services.metamodel.BeanSort; -import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.metamodel.objectmanager.ObjectManager; import org.apache.causeway.core.metamodel.spec.ActionScope; 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.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry; @@ -23,20 +20,16 @@ import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import org.apache.causeway.viewer.graphql.model.types._Constants; import org.apache.causeway.viewer.graphql.model.util._LTN; -import static org.apache.causeway.viewer.graphql.model.domain.GqlvAction.addGqlArguments; import static org.apache.causeway.viewer.graphql.model.types._Constants.GQL_INPUTTYPE_PREFIX; import lombok.Getter; -import lombok.val; import graphql.Scalars; -import graphql.schema.GraphQLArgument; import graphql.schema.GraphQLCodeRegistry; import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLInputObjectType; import graphql.schema.GraphQLList; import graphql.schema.GraphQLObjectType; -import graphql.schema.GraphQLOutputType; import graphql.schema.GraphQLType; import graphql.schema.GraphQLTypeReference; @@ -202,17 +195,10 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G void addAction(final ObjectAction objectAction) { - if (objectAction.getSemantics().isSafeInNature()) { + GraphQLObjectType.Builder objectTypeBuilder = getGqlObjectTypeBuilder(); - val fieldName = objectAction.getId(); - GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition() - .name(fieldName) - .type((GraphQLOutputType) TypeMapper.typeForObjectAction(objectAction)); - addGqlArguments(objectAction, fieldBuilder); - GraphQLFieldDefinition fieldDefinition = fieldBuilder.build(); - getGqlObjectTypeBuilder().field(fieldDefinition); - safeActions.add(new GqlvAction(this, objectAction, fieldDefinition, codeRegistryBuilder)); + safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, codeRegistryBuilder)); } else { mutators.addActionAsField(objectAction); 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 5afe4b6ccf..39aa4e4e34 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 @@ -33,7 +33,7 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { return objectSpecification.getLogicalTypeName(); } - private final GraphQLObjectType.Builder gqlObjectTypeBuilder; + private final GraphQLObjectType.Builder objectTypeBuilder; private GraphQLObjectType gqlObjectType; @@ -48,7 +48,7 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { this.mutators = new GqlvMutators(this, codeRegistryBuilder); - this.gqlObjectTypeBuilder = newObject().name(_LTN.sanitized(objectSpecification)); + this.objectTypeBuilder = newObject().name(_LTN.sanitized(objectSpecification)); } @@ -65,7 +65,7 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { if (gqlObjectType != null) { throw new IllegalArgumentException(String.format("GqlObjectType has already been built for %s", getLogicalTypeName())); } - return gqlObjectType = gqlObjectTypeBuilder.build(); + return gqlObjectType = objectTypeBuilder.build(); } /** @@ -82,7 +82,7 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { public GraphQLFieldDefinition createTopLevelQueryField() { return newFieldDefinition() .name(_LTN.sanitized(objectSpecification)) - .type(gqlObjectTypeBuilder) + .type(objectTypeBuilder) .build(); } @@ -103,10 +103,10 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { .collect(Collectors.toList())); } GraphQLFieldDefinition fieldDefinition = fieldBuilder.build(); - gqlObjectTypeBuilder.field(fieldDefinition); + objectTypeBuilder.field(fieldDefinition); // TODO: either safe or mutator - safeActions.add(new GqlvAction(this, objectAction, fieldDefinition, codeRegistryBuilder)); + safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, codeRegistryBuilder)); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java index 49def43364..912704705c 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java @@ -56,7 +56,7 @@ public class GqlvMutators implements GqlvActionHolder { GraphQLFieldDefinition fieldDefinition = fieldBuilder.build(); objectTypeBuilder.field(fieldDefinition); - actions.add(new GqlvAction(holder, objectAction, fieldDefinition, codeRegistryBuilder)); + actions.add(new GqlvAction(holder, objectAction, objectTypeBuilder, codeRegistryBuilder)); } private final List<GqlvAction> actions = new ArrayList<>(); diff --git a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json index de2b263869..e39e7c964c 100644 --- a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json +++ b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json @@ -6858,9 +6858,13 @@ "name" : "name", "description" : null, "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } }, "defaultValue" : null }, { @@ -7029,9 +7033,13 @@ "name" : "name", "description" : null, "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } }, "defaultValue" : null } ], diff --git a/incubator/viewers/graphql/test/src/test/resources/schema.gql b/incubator/viewers/graphql/test/src/test/resources/schema.gql index 1086e5bcc4..21aca7cbaa 100644 --- a/incubator/viewers/graphql/test/src/test/resources/schema.gql +++ b/incubator/viewers/graphql/test/src/test/resources/schema.gql @@ -589,7 +589,7 @@ type university_dept_Department { } type university_dept_DepartmentMenu { - createDepartment(deptHead: _gql_input__university_dept_DeptHead, name: String): university_dept_Department + createDepartment(deptHead: _gql_input__university_dept_DeptHead, name: String!): university_dept_Department findAllDepartments: [university_dept_Department] } @@ -608,7 +608,7 @@ type university_dept_DeptHead { type university_dept_DeptHeadMenu { findAllDeptHeads: [university_dept_DeptHead] - findDeptHeadByName(name: String): university_dept_DeptHead + findDeptHeadByName(name: String!): university_dept_DeptHead } type university_dept_DeptHead__meta {
