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 f5269332f7 CAUSEWAY-3676: fleshing out GqlvServiceStructure
f5269332f7 is described below
commit f5269332f720ac4a5764acf77fbdcb6b43850369
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 16:55:27 2024 +0000
CAUSEWAY-3676: fleshing out GqlvServiceStructure
---
.../graphql/viewer/source/GqlvObjectBehaviour.java | 6 +---
.../viewer/source/GqlvServiceBehaviour.java | 5 ++++
.../viewer/source/GqlvServiceStructure.java | 33 ++++++++++++++++++++--
.../graphql/viewer/source/QueryFieldFactory.java | 18 ++++++------
4 files changed, 46 insertions(+), 16 deletions(-)
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
index 3e1202386b..1ab0c21ab5 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
@@ -9,17 +9,14 @@ import org.apache.causeway.applib.services.metamodel.BeanSort;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
-import graphql.schema.GraphQLFieldDefinition;
-
import lombok.RequiredArgsConstructor;
import graphql.schema.DataFetcher;
-import graphql.schema.FieldCoordinates;
import graphql.schema.GraphQLCodeRegistry;
+import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLType;
@@ -36,7 +33,6 @@ public class GqlvObjectBehaviour {
private final SpecificationLoader specificationLoader;
-
public void createAndRegisterDataFetchersForMetaData() {
codeRegistryBuilder.dataFetcher(
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
index 2cf79f14a7..ce1ac9f176 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
@@ -1,10 +1,15 @@
package org.apache.causeway.viewer.graphql.viewer.source;
+import graphql.schema.GraphQLCodeRegistry;
+
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class GqlvServiceBehaviour {
private final GqlvServiceStructure structure;
+ private final Object service;
+ private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
+
}
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 685e11f662..1e14b0a0e8 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
@@ -1,13 +1,42 @@
package org.apache.causeway.viewer.graphql.viewer.source;
+import graphql.schema.GraphQLObjectType;
+
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-@RequiredArgsConstructor
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
+import static graphql.schema.GraphQLObjectType.newObject;
+
public class GqlvServiceStructure {
@Getter private final ObjectSpecification serviceSpec;
+ @Getter private final GqlvTopLevelQueryStructure topLevelQueryStructure;
+
+ private final GraphQLObjectType.Builder queryBuilder;
+
+ private GraphQLObjectType.Builder gqlObjectTypeBuilder;
+
+ // TODO - don't expose
+ public GraphQLObjectType.Builder getGraphQlTypeBuilder() {
+ return gqlObjectTypeBuilder;
+ }
+
+ public GqlvServiceStructure(ObjectSpecification serviceSpec,
GqlvTopLevelQueryStructure topLevelQueryStructure) {
+ this.serviceSpec = serviceSpec;
+ this.topLevelQueryStructure = topLevelQueryStructure;
+
+ queryBuilder = topLevelQueryStructure.getQueryBuilder();
+
+ gqlObjectTypeBuilder = newObject().name(_LTN.sanitized(serviceSpec));
+ }
+
+ public void addTypeToTopLevelQuery() {
+ queryBuilder.field(newFieldDefinition()
+ .name(_LTN.sanitized(serviceSpec))
+ .type(getGraphQlTypeBuilder())
+ .build());
+ }
}
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 2bb999703b..7a8d37db8e 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
@@ -71,14 +71,16 @@ public class QueryFieldFactory {
}
private void addService(
- final ObjectSpecification objectSpec,
+ final ObjectSpecification serviceSpec,
final Object service,
final GqlvTopLevelQueryStructure topLevelQueryStructure,
final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
- final GraphQLObjectType.Builder queryBuilder =
topLevelQueryStructure.getQueryBuilder();
+ val gqlvServiceStructure = new GqlvServiceStructure(serviceSpec,
topLevelQueryStructure);
+
+ //final GraphQLObjectType.Builder queryBuilder =
topLevelQueryStructure.getQueryBuilder();
- List<ObjectAction> objectActionList =
objectSpec.streamRuntimeActions(MixedIn.INCLUDED)
+ List<ObjectAction> objectActionList =
serviceSpec.streamRuntimeActions(MixedIn.INCLUDED)
.map(ObjectAction.class::cast)
.filter((final ObjectAction x) ->
x.containsFacet(ActionSemanticsFacet.class))
// .filter(x -> x.getFacet(ActionSemanticsFacet.class).value() ==
SemanticsOf.SAFE)
@@ -87,7 +89,8 @@ public class QueryFieldFactory {
// for now filters when no safe actions
if (!objectActionList.isEmpty()) {
- val serviceAsGraphQlType =
newObject().name(_LTN.sanitized(objectSpec));
+ val serviceAsGraphQlType =
gqlvServiceStructure.getGraphQlTypeBuilder();
+
objectActionList
.forEach(objectAction -> {
@@ -103,15 +106,12 @@ public class QueryFieldFactory {
});
- queryBuilder.field(newFieldDefinition()
- .name(_LTN.sanitized(objectSpec))
- .type(serviceAsGraphQlType)
- .build());
+ gqlvServiceStructure.addTypeToTopLevelQuery();
codeRegistryBuilder
.dataFetcher(
FieldCoordinates.coordinates("Query", newFieldDefinition()
- .name(_LTN.sanitized(objectSpec))
+ .name(_LTN.sanitized(serviceSpec))
.type(serviceAsGraphQlType)
.build().getName()),
(DataFetcher<Object>) environment -> service);