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 42c901ff99 CAUSEWAY-3676: fleshing out GqlvServiceStructure
42c901ff99 is described below
commit 42c901ff99e6f48cf6d09750f6977c7ef5f16388
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 16:59:51 2024 +0000
CAUSEWAY-3676: fleshing out GqlvServiceStructure
---
.../viewer/source/GqlvServiceStructure.java | 30 ++++++++++++++++++++++
.../graphql/viewer/source/QueryFieldFactory.java | 8 ++----
2 files changed, 32 insertions(+), 6 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 1e14b0a0e8..64a65ae39e 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
@@ -14,10 +14,20 @@ public class GqlvServiceStructure {
@Getter private final ObjectSpecification serviceSpec;
@Getter private final GqlvTopLevelQueryStructure topLevelQueryStructure;
+ private String getLogicalTypeName() {
+ return serviceSpec.getLogicalTypeName();
+ }
+
+ public String getLogicalTypeNameSanitized() {
+ return _LTN.sanitized(serviceSpec);
+ }
+
private final GraphQLObjectType.Builder queryBuilder;
private GraphQLObjectType.Builder gqlObjectTypeBuilder;
+ private GraphQLObjectType gqlObjectType;
+
// TODO - don't expose
public GraphQLObjectType.Builder getGraphQlTypeBuilder() {
return gqlObjectTypeBuilder;
@@ -39,4 +49,24 @@ public class GqlvServiceStructure {
.build());
}
+ /**
+ * @see #getGqlObjectType()
+ */
+ public GraphQLObjectType buildObjectGqlType() {
+ if (gqlObjectType != null) {
+ throw new IllegalArgumentException(String.format("GqlObjectType
has already been built for %s", getLogicalTypeName()));
+ }
+ return gqlObjectType = gqlObjectTypeBuilder.build();
+ }
+
+ /**
+ * @see #buildObjectGqlType()
+ */
+ public GraphQLObjectType getGqlObjectType() {
+ if (gqlObjectType == null) {
+ throw new IllegalStateException(String.format(
+ "GraphQLObjectType has not yet been built for %s",
getLogicalTypeName()));
+ }
+ return gqlObjectType;
+ }
}
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 7a8d37db8e..34f406bc0a 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
@@ -78,8 +78,6 @@ public class QueryFieldFactory {
val gqlvServiceStructure = new GqlvServiceStructure(serviceSpec,
topLevelQueryStructure);
- //final GraphQLObjectType.Builder queryBuilder =
topLevelQueryStructure.getQueryBuilder();
-
List<ObjectAction> objectActionList =
serviceSpec.streamRuntimeActions(MixedIn.INCLUDED)
.map(ObjectAction.class::cast)
.filter((final ObjectAction x) ->
x.containsFacet(ActionSemanticsFacet.class))
@@ -91,19 +89,17 @@ public class QueryFieldFactory {
val serviceAsGraphQlType =
gqlvServiceStructure.getGraphQlTypeBuilder();
-
objectActionList
.forEach(objectAction -> {
addAction(objectAction, serviceAsGraphQlType);
});
- GraphQLObjectType graphQLObjectType = serviceAsGraphQlType.build();
+
+ GraphQLObjectType graphQLObjectType =
gqlvServiceStructure.buildObjectGqlType();
objectActionList
.forEach(objectAction -> {
-
addBehaviour(objectAction, graphQLObjectType,
codeRegistryBuilder);
-
});
gqlvServiceStructure.addTypeToTopLevelQuery();