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 db5d4d5c66ab4d23642beff33c67642ac14b00a8 Author: danhaywood <[email protected]> AuthorDate: Sat Jan 20 19:38:53 2024 +0000 CAUSEWAY-3676: still attempting to add mutator actions to DomainService --- .../graphql/model/domain/GqlvDomainObject.java | 7 ----- .../graphql/model/domain/GqlvDomainService.java | 34 +++++++++++++++------- .../integration/GraphQlSourceForCauseway.java | 11 ++++--- 3 files changed, 28 insertions(+), 24 deletions(-) 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 65a5603c13..293e405a18 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 @@ -194,7 +194,6 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G void addAction(final ObjectAction objectAction) { - if (objectAction.getSemantics().isSafeInNature()) { safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, codeRegistryBuilder)); } else { @@ -203,11 +202,6 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G } - boolean hasMutators() { - return mutators.hasActions(); - } - - /** * Should be called only after fields etc have been added. * @@ -304,7 +298,6 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G // } // }); - } 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 350ec76dfa..d1b1bb5777 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 @@ -1,12 +1,9 @@ package org.apache.causeway.viewer.graphql.model.domain; -import graphql.schema.GraphQLArgument; import graphql.schema.GraphQLCodeRegistry; import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLObjectType; -import graphql.schema.GraphQLOutputType; - import lombok.Getter; import java.util.ArrayList; @@ -19,9 +16,9 @@ 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.viewer.graphql.model.registry.GraphQLTypeRegistry; import org.apache.causeway.viewer.graphql.model.types._Constants; import org.apache.causeway.viewer.graphql.model.util._LTN; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @@ -65,7 +62,7 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { /** * @see #getGqlObjectType() */ - public GraphQLObjectType buildObjectGqlType() { + public GraphQLObjectType buildGqlObjectType() { if (gqlObjectType != null) { throw new IllegalArgumentException(String.format("GqlObjectType has already been built for %s", getLogicalTypeName())); } @@ -73,7 +70,7 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { } /** - * @see #buildObjectGqlType() + * @see #buildGqlObjectType() */ public GraphQLObjectType getGqlObjectType() { if (gqlObjectType == null) { @@ -92,8 +89,13 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { public void addAction(final ObjectAction objectAction) { - // TODO: either safe or mutator - safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, codeRegistryBuilder)); + if (objectAction.getSemantics().isSafeInNature()) { + safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, codeRegistryBuilder)); + } else { + // TODO: should register with mutators instead ... +// mutators.addAction(objectAction); + safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, codeRegistryBuilder)); + } } public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() { @@ -110,18 +112,28 @@ public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder { objectActionList.forEach(this::addAction); - Optional<GraphQLObjectType> mutatorsTypeIfAny = buildMutatorsTypeIfAny(); mutatorsTypeIfAny.ifPresent(mutatorsType -> { - GraphQLFieldDefinition gql_mutations = newFieldDefinition() .name(_Constants.GQL_MUTATIONS_FIELDNAME) .type(mutatorsType) .build(); objectTypeBuilder.field(gql_mutations); - }); return !objectActionList.isEmpty(); } + + public void registerTypesInto(GraphQLTypeRegistry graphQLTypeRegistry) { + + GraphQLObjectType graphQLObjectType = buildGqlObjectType(); + //graphQLTypeRegistry.addTypeIfNotAlreadyPresent(graphQLObjectType); + + getMutatorsTypeIfAny().ifPresent(graphQLTypeRegistry::addTypeIfNotAlreadyPresent); + } + + public Optional<GraphQLObjectType> getMutatorsTypeIfAny() { + return mutators.getMutatorsTypeIfAny(); + } + } diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java index 8fe0391daf..f26ff4d2a6 100644 --- a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java +++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java @@ -158,25 +158,24 @@ public class GraphQlSourceForCauseway implements GraphQlSource { final GraphQLCodeRegistry.Builder codeRegistryBuilder) { serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName()) - .ifPresent(service -> { - addDomainServiceToTopLevelQuery(service, objectSpec, topLevelQueryStructure, codeRegistryBuilder); - }); + .ifPresent(servicePojo -> + addDomainServiceToTopLevelQuery(servicePojo, objectSpec, topLevelQueryStructure, codeRegistryBuilder)); } private void addDomainServiceToTopLevelQuery( - final Object service, + final Object servicePojo, final ObjectSpecification objectSpec, final GqlvTopLevelQuery topLevelQueryStructure, final GraphQLCodeRegistry.Builder codeRegistryBuilder) { - val domainService = new GqlvDomainService(objectSpec, service, codeRegistryBuilder); + val domainService = new GqlvDomainService(objectSpec, servicePojo, codeRegistryBuilder); boolean actionsAdded = domainService.addActions(); if (!actionsAdded) { return; } - domainService.buildObjectGqlType(); + domainService.registerTypesInto(graphQLTypeRegistry); domainService.getSafeActions().forEach(GqlvAction::addDataFetcher);
