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 024ff34a45869d4db4b97aaecf7478dbc90f9066 Author: danhaywood <[email protected]> AuthorDate: Sat Jan 20 16:29:51 2024 +0000 CAUSEWAY-3676: factors out GqlvDomainObjectMutators --- .../graphql/model/domain/GqlvDomainObject.java | 38 +++-------- .../model/domain/GqlvDomainObjectMutators.java | 75 ++++++++++++++++++++++ 2 files changed, 85 insertions(+), 28 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 838c76fa5b..cf814cda4f 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 @@ -59,6 +59,8 @@ import static graphql.schema.GraphQLTypeReference.typeRef; */ public class GqlvDomainObject { + private final GqlvDomainObjectMutators mutators; + @UtilityClass static class Fields { static GraphQLFieldDefinition id = @@ -87,7 +89,7 @@ public class GqlvDomainObject { @Getter private final GraphQLObjectType.Builder gqlObjectTypeBuilder; @Getter private final GraphQLInputObjectType gqlInputObjectType; - private String getLogicalTypeName() { + String getLogicalTypeName() { return objectSpec.getLogicalTypeName(); } @@ -103,11 +105,8 @@ public class GqlvDomainObject { return (GraphQLObjectType) metaField.getType(); } - String getMutatorsTypeName() { - return getLogicalTypeNameSanitized() + "__DomainObject_mutators"; - } - final GraphQLObjectType.Builder mutatorsTypeBuilder; + private final List<GqlvProperty> properties = new ArrayList<>(); public List<GqlvProperty> getProperties() {return Collections.unmodifiableList(properties);} @@ -118,19 +117,12 @@ public class GqlvDomainObject { private final List<GqlvAction> safeActions = new ArrayList<>(); public List<GqlvAction> getSafeActions() {return Collections.unmodifiableList(safeActions);} - private final List<GqlvAction> mutatorActions = new ArrayList<>(); - public List<GqlvAction> getMutatorActions() {return Collections.unmodifiableList(mutatorActions);} /** * Built using {@link #buildGqlObjectType()} */ private GraphQLObjectType gqlObjectType; - /** - * Built lazily using {@link #buildMutatorsTypeIfAny()} - */ - @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - private Optional<GraphQLObjectType> mutatorsTypeIfAny; public GqlvDomainObject( @@ -160,7 +152,7 @@ public class GqlvDomainObject { .build()); gqlInputObjectType = inputTypeBuilder.build(); - mutatorsTypeBuilder = newObject().name(getMutatorsTypeName()); + mutators = new GqlvDomainObjectMutators(this); } @@ -304,12 +296,12 @@ public class GqlvDomainObject { public void addNonSafeActionAsMutatorField( final ObjectAction objectAction, final GraphQLFieldDefinition fieldDefinition) { - mutatorsTypeBuilder.field(fieldDefinition); - mutatorActions.add(new GqlvAction(objectAction, fieldDefinition)); + + mutators.addActionAsField(objectAction, fieldDefinition); } boolean hasMutators() { - return !mutatorActions.isEmpty(); + return mutators.hasActions(); } @@ -341,24 +333,14 @@ public class GqlvDomainObject { * @see #buildMutatorsTypeIfAny() */ public Optional<GraphQLObjectType> getMutatorsTypeIfAny() { - //noinspection OptionalAssignedToNull - if (mutatorsTypeIfAny == null) { - throw new IllegalArgumentException(String.format("Gql MutatorsType has not yet been built for %s", getLogicalTypeName())); - } - return mutatorsTypeIfAny; + return mutators.getMutatorsTypeIfAny(); } /** * @see #getMutatorsTypeIfAny() */ public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() { - //noinspection OptionalAssignedToNull - if (mutatorsTypeIfAny != null) { - throw new IllegalArgumentException("Gql MutatorsType has already been built for " + getLogicalTypeName()); - } - return mutatorsTypeIfAny = hasMutators() - ? Optional.of(mutatorsTypeBuilder.build()) - : Optional.empty(); + return mutators.buildMutatorsTypeIfAny(); } public void addActionsAsFields() { diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java new file mode 100644 index 0000000000..71986cce55 --- /dev/null +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java @@ -0,0 +1,75 @@ +package org.apache.causeway.viewer.graphql.model.domain; + +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLObjectType; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; + +import static graphql.schema.GraphQLObjectType.newObject; + +public class GqlvDomainObjectMutators { + + private final GqlvDomainObject domainObject; + + final GraphQLObjectType.Builder mutatorsTypeBuilder; + + /** + * Built lazily using {@link #buildMutatorsTypeIfAny()} + */ + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + private Optional<GraphQLObjectType> mutatorsTypeIfAny; + + public GqlvDomainObjectMutators( + final GqlvDomainObject domainObject) { + this.domainObject = domainObject; + + mutatorsTypeBuilder = newObject().name(this.domainObject.getLogicalTypeNameSanitized() + "__DomainObject_mutators"); + + } + + public void addActionAsField( + final ObjectAction objectAction, + final GraphQLFieldDefinition fieldDefinition) { + + mutatorsTypeBuilder.field(fieldDefinition); + actions.add(new GqlvAction(objectAction, fieldDefinition)); + } + + private final List<GqlvAction> actions = new ArrayList<>(); + public List<GqlvAction> getActions() {return Collections.unmodifiableList(actions);} + + boolean hasActions() { + return !actions.isEmpty(); + } + + + /** + * @see #buildMutatorsTypeIfAny() + */ + public Optional<GraphQLObjectType> getMutatorsTypeIfAny() { + //noinspection OptionalAssignedToNull + if (mutatorsTypeIfAny == null) { + throw new IllegalArgumentException(String.format("Gql MutatorsType has not yet been built for %s", domainObject.getLogicalTypeName())); + } + return mutatorsTypeIfAny; + } + + /** + * @see #getMutatorsTypeIfAny() + */ + public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() { + //noinspection OptionalAssignedToNull + if (mutatorsTypeIfAny != null) { + throw new IllegalArgumentException("Gql MutatorsType has already been built for " + domainObject.getLogicalTypeName()); + } + return mutatorsTypeIfAny = hasActions() + ? Optional.of(mutatorsTypeBuilder.build()) + : Optional.empty(); + } + +}
