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 17b842b77e CAUSEWAY-3676: wip on toplevel query structure, numServices
17b842b77e is described below
commit 17b842b77ea2d10ec6a435d551889988f2935852
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 15:34:31 2024 +0000
CAUSEWAY-3676: wip on toplevel query structure, numServices
---
.../test/e2e/Schema_IntegTest.schema.approved.json | 22 ++++++------
.../integration/GraphQlSourceForCauseway.java | 13 ++------
.../graphql/viewer/source/GqlvObjectStructure.java | 2 +-
.../viewer/source/GqlvTopLevelQueryStructure.java | 39 ++++++++++++++++++++++
4 files changed, 53 insertions(+), 23 deletions(-)
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 447ff3cb33..8156430cfb 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
@@ -38,6 +38,17 @@
"name" : "Query",
"description" : null,
"fields" : [ {
+ "name" : "numServices",
+ "description" : null,
+ "args" : [ ],
+ "type" : {
+ "kind" : "SCALAR",
+ "name" : "Int",
+ "ofType" : null
+ },
+ "isDeprecated" : false,
+ "deprecationReason" : null
+ }, {
"name" : "causeway_applib_UserMenu",
"description" : null,
"args" : [ ],
@@ -92,17 +103,6 @@
},
"isDeprecated" : false,
"deprecationReason" : null
- }, {
- "name" : "numServices",
- "description" : null,
- "args" : [ ],
- "type" : {
- "kind" : "SCALAR",
- "name" : "Int",
- "ofType" : null
- },
- "isDeprecated" : false,
- "deprecationReason" : null
} ],
"inputFields" : null,
"interfaces" : [ ],
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 509fa9f3b2..3ad6fec9dd 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
@@ -98,25 +98,18 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
final GraphQLCodeRegistry.Builder codeRegistryBuilder =
GraphQLCodeRegistry.newCodeRegistry();
val gqlvTopLevelQueryStructure = new GqlvTopLevelQueryStructure();
- final GraphQLObjectType.Builder queryBuilder =
gqlvTopLevelQueryStructure.getQueryBuilder();
specificationLoader.snapshotSpecifications()
.distinct((a, b) ->
a.getLogicalTypeName().equals(b.getLogicalTypeName()))
.sorted(Comparator.comparing(HasLogicalType::getLogicalTypeName))
.forEach(objectSpec -> addToSchema(objectSpec,
codeRegistryBuilder, gqlvTopLevelQueryStructure));
- final GraphQLFieldDefinition numServicesField = newFieldDefinition()
- .name("numServices")
- .type(Scalars.GraphQLInt)
- .build();
-
- queryBuilder.field(numServicesField);
- GraphQLObjectType queryType = queryBuilder.build();
+ GraphQLObjectType queryType =
gqlvTopLevelQueryStructure.buildQueryType();
codeRegistryBuilder
.dataFetcher(
- coordinates(queryType, numServicesField),
+ coordinates(queryType,
gqlvTopLevelQueryStructure.getNumServicesField()),
(DataFetcher<Object>) environment ->
this.serviceRegistry.streamRegisteredBeans().count());
val codeRegistry = codeRegistryBuilder.build();
@@ -132,8 +125,6 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
final GraphQLCodeRegistry.Builder codeRegistryBuilder,
final GqlvTopLevelQueryStructure gqlvTopLevelQueryStructure) {
- final GraphQLObjectType.Builder queryBuilder =
gqlvTopLevelQueryStructure.getQueryBuilder();
-
switch (objectSpec.getBeanSort()) {
case MANAGED_BEAN_CONTRIBUTING: // @DomainService
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
index f44be72ba2..f9c97fffac 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
@@ -295,7 +295,7 @@ public class GqlvObjectStructure {
public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
//noinspection OptionalAssignedToNull
if (mutatorsTypeIfAny != null) {
- throw new IllegalArgumentException("MutatorsType has already been
built for " + getLogicalTypeName());
+ throw new IllegalArgumentException("Gql MutatorsType has already
been built for " + getLogicalTypeName());
}
return mutatorsTypeIfAny = hasMutators()
? Optional.of(mutatorsTypeBuilder.build())
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
index da13d701e6..88ca9bd7ea 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
@@ -1,17 +1,56 @@
package org.apache.causeway.viewer.graphql.viewer.source;
+import graphql.Scalars;
+import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLObjectType;
import lombok.Getter;
+import java.util.Optional;
+
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;
public class GqlvTopLevelQueryStructure {
@Getter final GraphQLObjectType.Builder queryBuilder;
+ @Getter private GraphQLFieldDefinition numServicesField;
+
+ /**
+ * Built using {@link #buildQueryType()}
+ */
+ private GraphQLObjectType queryType;
+
+
public GqlvTopLevelQueryStructure() {
queryBuilder = newObject().name("Query");
+
+ numServicesField = newFieldDefinition()
+ .name("numServices")
+ .type(Scalars.GraphQLInt)
+ .build();
+ queryBuilder.field(numServicesField);
+ }
+
+
+
+ public GraphQLObjectType buildQueryType() {
+ if (queryType != null) {
+ throw new IllegalStateException("QueryType has already been
built");
+ }
+ return queryType = queryBuilder.build();
+ }
+
+ /**
+ *
+ * @see #buildQueryType()
+ */
+ public GraphQLObjectType getQueryType() {
+ if (queryType == null) {
+ throw new IllegalStateException("QueryType has not yet been
built");
+ }
+ return queryType;
}
}