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
The following commit(s) were added to refs/heads/CAUSEWAY-3676 by this push:
new c4f3115139 CAUSEWAY-3676: wip towards removing GqlObjectTypeBuilder as
public ... addActions, mutator fields
c4f3115139 is described below
commit c4f31151391dbdd6ffb388bae945aafac4b0e6f3
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 12:52:37 2024 +0000
CAUSEWAY-3676: wip towards removing GqlObjectTypeBuilder as public ...
addActions, mutator fields
---
.../graphql/viewer/source/GqlvObjectSpec.java | 13 +++++++
.../graphql/viewer/source/ObjectTypeFactory.java | 42 +++++-----------------
2 files changed, 22 insertions(+), 33 deletions(-)
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
index b5c7e98e79..28d1da87ef 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
@@ -13,6 +13,9 @@ import graphql.schema.GraphQLTypeReference;
import lombok.Getter;
import lombok.val;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.causeway.applib.services.metamodel.BeanSort;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
@@ -50,6 +53,11 @@ public class GqlvObjectSpec {
return (GraphQLObjectType) metaField.getType();
}
+
+ final String mutatorsTypeName;
+ final GraphQLObjectType.Builder mutatorsTypeBuilder;
+ final List<GraphQLFieldDefinition> mutatorsTypeFields = new ArrayList<>();
+
/**
* Built using {@link #buildGqlObjectType()}
*/
@@ -72,6 +80,10 @@ public class GqlvObjectSpec {
.type(nonNull(Scalars.GraphQLID))
.build());
gqlInputObjectType = inputTypeBuilder.build();
+
+ mutatorsTypeName = getLogicalTypeNameSanitized() +
"__DomainObject_mutators";
+ mutatorsTypeBuilder = newObject().name(mutatorsTypeName);
+
}
private GraphQLObjectType metaType() {
@@ -85,6 +97,7 @@ public class GqlvObjectSpec {
}
+
void addFields() {
objectSpec.streamProperties(MixedIn.INCLUDED)
.forEach(this::addField);
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
index 83c3568b75..fda9795828 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
@@ -76,10 +76,6 @@ public class ObjectTypeFactory {
private final ObjectManager objectManager;
private final GraphQLTypeRegistry graphQLTypeRegistry;
- static String mutatorsTypeName(final String logicalTypeNameSanitized){
- return logicalTypeNameSanitized + "__DomainObject_mutators";
- }
-
@UtilityClass
static class Fields {
static GraphQLFieldDefinition id =
@@ -168,27 +164,26 @@ public class ObjectTypeFactory {
MutatorsDataForEntity addActions(final GqlvObjectSpec gqlvObjectSpec) {
- final String logicalTypeNameSanitized =
gqlvObjectSpec.getLogicalTypeNameSanitized();
- final ObjectSpecification objectSpecification =
gqlvObjectSpec.getObjectSpec();
+ final ObjectSpecification objectSpec = gqlvObjectSpec.getObjectSpec();
final GraphQLObjectType.Builder objectTypeBuilder =
gqlvObjectSpec.getGqlObjectTypeBuilder();
- MutatorManager result = mutatorManager(logicalTypeNameSanitized);
- objectSpecification.streamActions(ActionScope.PRODUCTION,
MixedIn.INCLUDED)
+ objectSpec.streamActions(ActionScope.PRODUCTION, MixedIn.INCLUDED)
.forEach(objectAction ->
- addAction(objectAction, objectTypeBuilder,
result.mutatorsTypeBuilder, result.mutatorsTypeFields)
+ addAction(objectAction, objectTypeBuilder,
gqlvObjectSpec.mutatorsTypeBuilder, gqlvObjectSpec.mutatorsTypeFields)
);
- if (!result.mutatorsTypeFields.isEmpty()){
- GraphQLObjectType mutatorsType =
result.mutatorsTypeBuilder.build();
- graphQLTypeRegistry.addTypeIfNotAlreadyPresent(mutatorsType,
result.mutatorsTypeName);
+ if (!gqlvObjectSpec.mutatorsTypeFields.isEmpty()){
+ GraphQLObjectType mutatorsType =
gqlvObjectSpec.mutatorsTypeBuilder.build();
+ graphQLTypeRegistry.addTypeIfNotAlreadyPresent(mutatorsType,
gqlvObjectSpec.mutatorsTypeName);
+
GraphQLFieldDefinition gql_mutations = newFieldDefinition()
.name(GQL_MUTATIONS_FIELDNAME)
.type(mutatorsType)
.build();
objectTypeBuilder.field(gql_mutations);
- return new MutatorsDataForEntity(mutatorsType,
result.mutatorsTypeFields);
+ return new MutatorsDataForEntity(mutatorsType,
gqlvObjectSpec.mutatorsTypeFields);
// // I think we have to create and register data fetcher for
mutations here, but we can't since we have no objectTypeYet
//
codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(graphQLTypeReference,
gql_mutations), new DataFetcher<Object>() {
@@ -217,25 +212,6 @@ public class ObjectTypeFactory {
}
- private static MutatorManager mutatorManager(String
logicalTypeNameSanitized) {
- val mutatorsTypeName = mutatorsTypeName(logicalTypeNameSanitized);
- GraphQLObjectType.Builder mutatorsTypeBuilder =
newObject().name(mutatorsTypeName);
- final List<GraphQLFieldDefinition> mutatorsTypeFields = new
ArrayList<>();
- MutatorManager result = new MutatorManager(mutatorsTypeName,
mutatorsTypeBuilder, mutatorsTypeFields);
- return result;
- }
-
- private static class MutatorManager {
- public final String mutatorsTypeName;
- public final GraphQLObjectType.Builder mutatorsTypeBuilder;
- public final List<GraphQLFieldDefinition> mutatorsTypeFields;
-
- public MutatorManager(String mutatorsTypeName,
GraphQLObjectType.Builder mutatorsTypeBuilder, List<GraphQLFieldDefinition>
mutatorsTypeFields) {
- this.mutatorsTypeName = mutatorsTypeName;
- this.mutatorsTypeBuilder = mutatorsTypeBuilder;
- this.mutatorsTypeFields = mutatorsTypeFields;
- }
- }
private static void addAction(ObjectAction objectAction,
GraphQLObjectType.Builder objectTypeBuilder, GraphQLObjectType.Builder
mutatorsTypeBuilder, List<GraphQLFieldDefinition> mutatorsTypeFields) {
if (objectAction.getSemantics().isSafeInNature()) {
@@ -336,7 +312,7 @@ public class ObjectTypeFactory {
final Set<GraphQLType> graphQLObjectTypes) {
//TODO: this is not going to work, because we need to dynamically add
fields
- String mutatorsTypeName = mutatorsTypeName(logicalTypeNameSanitized);
+ String mutatorsTypeName = logicalTypeNameSanitized +
"__DomainObject_mutators";
GraphQLObjectType.Builder mutatorsTypeBuilder =
newObject().name(mutatorsTypeName);
GraphQLObjectType mutatorsType = mutatorsTypeBuilder.build();
graphQLObjectTypes.add(mutatorsType);