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 90530c9dd3 CAUSEWAY-3676: improves handling of adding top-level query
field for service
90530c9dd3 is described below
commit 90530c9dd379b350270dfb1a96223cd61b251392
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 17:33:27 2024 +0000
CAUSEWAY-3676: improves handling of adding top-level query field for service
---
.../viewer/source/GqlvServiceStructure.java | 39 +++++++++++++++++-----
.../graphql/viewer/source/QueryFieldFactory.java | 12 ++++---
2 files changed, 37 insertions(+), 14 deletions(-)
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
index f01f75f129..be457e604a 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
@@ -9,8 +9,6 @@ import java.util.Map;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.causeway.viewer.graphql.viewer.util._BiMap;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -21,6 +19,9 @@ public class GqlvServiceStructure {
@Getter private final ObjectSpecification serviceSpec;
@Getter private final GqlvTopLevelQueryStructure topLevelQueryStructure;
+ private GraphQLObjectType.Builder topLevelQueryField;
+
+
private String getLogicalTypeName() {
return serviceSpec.getLogicalTypeName();
}
@@ -49,13 +50,6 @@ public class GqlvServiceStructure {
gqlObjectTypeBuilder = newObject().name(_LTN.sanitized(serviceSpec));
}
- public void addTypeToTopLevelQuery() {
- queryBuilder.field(newFieldDefinition()
- .name(_LTN.sanitized(serviceSpec))
- .type(getGraphQlTypeBuilder())
- .build());
- }
-
private final _BiMap<ObjectAction, GraphQLFieldDefinition>
safeActionToField = new _BiMap<>();
private final _BiMap<ObjectAction, GraphQLFieldDefinition>
mutatorActionToField = new _BiMap<>();
@@ -91,4 +85,31 @@ public class GqlvServiceStructure {
}
return gqlObjectType;
}
+
+ /**
+ * @see #getTopLevelQueryField()
+ */
+ public GraphQLObjectType.Builder addTopLevelQueryField() {
+ if (topLevelQueryField != null) {
+ throw new IllegalStateException(String.format(
+ "queryField has already been added to top-level Query, for
%s", getLogicalTypeName()));
+ }
+ return topLevelQueryField = queryBuilder.field(newFieldDefinition()
+ .name(_LTN.sanitized(serviceSpec))
+ .type(getGraphQlTypeBuilder())
+ .build());
+ }
+
+ /**
+ * @see #addTopLevelQueryField()
+ */
+ public GraphQLObjectType.Builder getTopLevelQueryField() {
+ if (topLevelQueryField == null) {
+ throw new IllegalStateException(String.format(
+ "queryField has not yet been added to top-level Query, for
%s", getLogicalTypeName()));
+ }
+ return topLevelQueryField;
+ }
+
+
}
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 8a78ac7c75..0cbb1c6774 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
@@ -99,14 +99,16 @@ public class QueryFieldFactory {
addBehaviour(gqlvServiceStructure, objectAction,
codeRegistryBuilder);
});
- gqlvServiceStructure.addTypeToTopLevelQuery();
+ gqlvServiceStructure.addTopLevelQueryField();
+
+ String fieldName = newFieldDefinition()
+ .name(_LTN.sanitized(serviceSpec))
+ .type(serviceAsGraphQlType)
+ .build().getName();
codeRegistryBuilder
.dataFetcher(
- FieldCoordinates.coordinates("Query", newFieldDefinition()
- .name(_LTN.sanitized(serviceSpec))
- .type(serviceAsGraphQlType)
- .build().getName()),
+ FieldCoordinates.coordinates("Query", fieldName),
(DataFetcher<Object>) environment -> service);
}
}