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 f4df5712b1 CAUSEWAY-3676: encapsulating top level query structure
f4df5712b1 is described below
commit f4df5712b1a81cf404859838998dfa3183e6aa87
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 15:23:44 2024 +0000
CAUSEWAY-3676: encapsulating top level query structure
---
.../viewer/integration/GraphQlSourceForCauseway.java | 16 ++++++++++------
.../viewer/source/GqlvTopLevelQueryStructure.java | 17 +++++++++++++++++
.../viewer/graphql/viewer/source/QueryFieldFactory.java | 8 +++++---
3 files changed, 32 insertions(+), 9 deletions(-)
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 2ec42cc6c3..509fa9f3b2 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
@@ -31,6 +31,7 @@ import org.apache.causeway.applib.id.HasLogicalType;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import
org.apache.causeway.viewer.graphql.viewer.source.GqlvTopLevelQueryStructure;
import org.apache.causeway.viewer.graphql.viewer.source.GraphQLTypeRegistry;
import org.apache.causeway.viewer.graphql.viewer.source.ObjectTypeFactory;
import org.apache.causeway.viewer.graphql.viewer.source.QueryFieldFactory;
@@ -94,13 +95,15 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
throw new IllegalStateException("Metamodel is not fully
introspected");
}
- final GraphQLObjectType.Builder queryBuilder =
newObject().name("Query");
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, queryBuilder,
codeRegistryBuilder));
+ .forEach(objectSpec -> addToSchema(objectSpec,
codeRegistryBuilder, gqlvTopLevelQueryStructure));
final GraphQLFieldDefinition numServicesField = newFieldDefinition()
.name("numServices")
@@ -126,15 +129,16 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
private void addToSchema(
final ObjectSpecification objectSpec,
- final GraphQLObjectType.Builder queryBuilder,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder
- ) {
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+ final GqlvTopLevelQueryStructure gqlvTopLevelQueryStructure) {
+
+ final GraphQLObjectType.Builder queryBuilder =
gqlvTopLevelQueryStructure.getQueryBuilder();
switch (objectSpec.getBeanSort()) {
case MANAGED_BEAN_CONTRIBUTING: // @DomainService
-
queryFieldFactory.queryFieldFromObjectSpecification(queryBuilder,
codeRegistryBuilder, objectSpec);
+
queryFieldFactory.queryFieldFromObjectSpecification(objectSpec,
gqlvTopLevelQueryStructure, codeRegistryBuilder);
break;
case ABSTRACT:
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
new file mode 100644
index 0000000000..da13d701e6
--- /dev/null
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
@@ -0,0 +1,17 @@
+package org.apache.causeway.viewer.graphql.viewer.source;
+
+import graphql.schema.GraphQLObjectType;
+
+import lombok.Getter;
+
+import static graphql.schema.GraphQLObjectType.newObject;
+
+public class GqlvTopLevelQueryStructure {
+
+ @Getter final GraphQLObjectType.Builder queryBuilder;
+
+ public GqlvTopLevelQueryStructure() {
+ queryBuilder = newObject().name("Query");
+ }
+
+}
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
index 2057b68247..45b1237325 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
@@ -60,9 +60,11 @@ public class QueryFieldFactory {
private final SpecificationLoader specificationLoader;
public void queryFieldFromObjectSpecification(
- final GraphQLObjectType.Builder queryBuilder,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder,
- final ObjectSpecification objectSpec) {
+ final ObjectSpecification objectSpec,
+ final GqlvTopLevelQueryStructure gqlvTopLevelQueryStructure,
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
+
+ final GraphQLObjectType.Builder queryBuilder =
gqlvTopLevelQueryStructure.getQueryBuilder();
String logicalTypeNameSanitized = _LTN.sanitized(objectSpec);