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 0dfb9b3a104fde67ae4d74b54f6c9cc895fcb2e0 Author: danhaywood <[email protected]> AuthorDate: Sat Jan 20 18:32:27 2024 +0000 CAUSEWAY-3676: towards moving FieldDefinition creation within GqlvAction (2) --- .../viewer/graphql/model/domain/GqlvAction.java | 28 ++++++++++++++++ .../graphql/model/domain/GqlvDomainObject.java | 37 ++++++---------------- .../viewer/graphql/model/domain/GqlvMutators.java | 17 ++++++++-- 3 files changed, 52 insertions(+), 30 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 6549c53d61..07e920e4a2 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 @@ -8,14 +8,19 @@ 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 java.util.Map; +import java.util.stream.Collectors; + +import static graphql.schema.GraphQLNonNull.nonNull; public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> { @@ -68,4 +73,27 @@ public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> { return managedObject.getPojo(); } + static void addGqlArguments( + final ObjectAction objectAction, + final GraphQLFieldDefinition.Builder builder) { + + Can<ObjectActionParameter> parameters = objectAction.getParameters(); + + if (parameters.isNotEmpty()) { + builder.arguments(parameters.stream() + .map(GqlvAction::gqlArgumentFor) + .collect(Collectors.toList())); + } + } + + private static GraphQLArgument gqlArgumentFor(final ObjectActionParameter objectActionParameter) { + return GraphQLArgument.newArgument() + .name(objectActionParameter.getId()) + .type(objectActionParameter.isOptional() + ? TypeMapper.inputTypeFor(objectActionParameter) + : nonNull(TypeMapper.inputTypeFor(objectActionParameter))) + .build(); + } + + } 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 33bf28fef4..35d9a9a98f 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 @@ -23,6 +23,7 @@ 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; @@ -201,43 +202,23 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G void addAction(final ObjectAction objectAction) { - val fieldName = objectAction.getId(); - GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition() - .name(fieldName) - .type((GraphQLOutputType) TypeMapper.typeForObjectAction(objectAction)); - addGqlArguments(objectAction, fieldBuilder); - GraphQLFieldDefinition fieldDefinition = fieldBuilder.build(); if (objectAction.getSemantics().isSafeInNature()) { + + 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)); } else { - mutators.addActionAsField(objectAction, fieldDefinition); - } - } - - private static void addGqlArguments( - final ObjectAction objectAction, - final GraphQLFieldDefinition.Builder builder) { - Can<ObjectActionParameter> parameters = objectAction.getParameters(); - - if (parameters.isNotEmpty()) { - builder.arguments(parameters.stream() - .map(GqlvDomainObject::gqlArgumentFor) - .collect(Collectors.toList())); + mutators.addActionAsField(objectAction); } } - private static GraphQLArgument gqlArgumentFor(final ObjectActionParameter objectActionParameter) { - return GraphQLArgument.newArgument() - .name(objectActionParameter.getId()) - .type(objectActionParameter.isOptional() - ? TypeMapper.inputTypeFor(objectActionParameter) - : nonNull(TypeMapper.inputTypeFor(objectActionParameter))) - .build(); - } - boolean hasMutators() { return mutators.hasActions(); 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 958bf6bbb3..49def43364 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 @@ -3,6 +3,9 @@ package org.apache.causeway.viewer.graphql.model.domain; import graphql.schema.GraphQLCodeRegistry; import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLObjectType; +import graphql.schema.GraphQLOutputType; + +import lombok.val; import java.util.ArrayList; import java.util.Collections; @@ -10,10 +13,14 @@ import java.util.List; import java.util.Optional; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; +import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import org.apache.causeway.viewer.graphql.model.util._LTN; +import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; +import static org.apache.causeway.viewer.graphql.model.domain.GqlvAction.addGqlArguments; + public class GqlvMutators implements GqlvActionHolder { private final GqlvMutatorsHolder holder; @@ -39,8 +46,14 @@ public class GqlvMutators implements GqlvActionHolder { } public void addActionAsField( - final ObjectAction objectAction, - final GraphQLFieldDefinition fieldDefinition) { + final ObjectAction objectAction) { + + 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); actions.add(new GqlvAction(holder, objectAction, fieldDefinition, codeRegistryBuilder));
