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 7edb94941a CAUSEWAY-3676: wip to clean up QueryFieldFactory
7edb94941a is described below
commit 7edb94941a5d40a14e27bb73e845d78a43166ce9
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 15:06:54 2024 +0000
CAUSEWAY-3676: wip to clean up QueryFieldFactory
---
.../integration/GraphQlSourceForCauseway.java | 29 ++++++------
.../graphql/viewer/source/GqlvObjectStructure.java | 52 +++++++++++-----------
.../graphql/viewer/source/ObjectTypeFactory.java | 3 --
.../graphql/viewer/source/QueryFieldFactory.java | 9 ++--
.../viewer/graphql/viewer/source/TypeMapper.java | 4 +-
.../viewer/graphql/viewer/source/_Constants.java | 9 ++++
.../source/{_LogicalTypeName.java => _LTN.java} | 9 +++-
7 files changed, 63 insertions(+), 52 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 456edfd4e6..2ec42cc6c3 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
@@ -48,6 +48,7 @@ import graphql.GraphQL;
import graphql.Scalars;
import graphql.schema.DataFetcher;
import graphql.schema.GraphQLCodeRegistry;
+import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
@@ -62,7 +63,9 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
private final SpecificationLoader specificationLoader;
private final CausewayConfiguration causewayConfiguration;
private final CausewaySystemEnvironment causewaySystemEnvironment;
+
private final AsyncExecutionStrategyResolvingWithinInteraction
executionStrategy;
+
private final ObjectTypeFactory objectTypeFactory;
private final QueryFieldFactory queryFieldFactory;
private final GraphQLTypeRegistry graphQLTypeRegistry;
@@ -97,30 +100,31 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
specificationLoader.snapshotSpecifications()
.distinct((a, b) ->
a.getLogicalTypeName().equals(b.getLogicalTypeName()))
.sorted(Comparator.comparing(HasLogicalType::getLogicalTypeName))
- .forEach(objectSpec -> handleObjectSpec(objectSpec, queryBuilder,
codeRegistryBuilder));
+ .forEach(objectSpec -> addToSchema(objectSpec, queryBuilder,
codeRegistryBuilder));
- val query_numServices = newFieldDefinition()
+ final GraphQLFieldDefinition numServicesField = newFieldDefinition()
.name("numServices")
.type(Scalars.GraphQLInt)
.build();
- queryBuilder.field(query_numServices);
- GraphQLObjectType query = queryBuilder.build();
+ queryBuilder.field(numServicesField);
+
+ GraphQLObjectType queryType = queryBuilder.build();
codeRegistryBuilder
.dataFetcher(
- coordinates(query, query_numServices.getName()),
+ coordinates(queryType, numServicesField),
(DataFetcher<Object>) environment ->
this.serviceRegistry.streamRegisteredBeans().count());
val codeRegistry = codeRegistryBuilder.build();
return GraphQLSchema.newSchema()
- .query(query)
+ .query(queryType)
.additionalTypes(graphQLTypeRegistry.getGraphQLObjectTypes())
.codeRegistry(codeRegistry)
.build();
}
- private void handleObjectSpec(
+ private void addToSchema(
final ObjectSpecification objectSpec,
final GraphQLObjectType.Builder queryBuilder,
final GraphQLCodeRegistry.Builder codeRegistryBuilder
@@ -128,6 +132,11 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
switch (objectSpec.getBeanSort()) {
+ case MANAGED_BEAN_CONTRIBUTING: // @DomainService
+
+
queryFieldFactory.queryFieldFromObjectSpecification(queryBuilder,
codeRegistryBuilder, objectSpec);
+ break;
+
case ABSTRACT:
case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
case ENTITY: // @DomainObject(nature=ENTITY)
@@ -137,12 +146,6 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
break;
- case MANAGED_BEAN_CONTRIBUTING: //@DomainService
-
- queryFieldFactory
- .queryFieldFromObjectSpecification(queryBuilder,
codeRegistryBuilder, objectSpec);
- break;
-
case MANAGED_BEAN_NOT_CONTRIBUTING: // a @Service or @Component
... ignore
case MIXIN:
case VALUE:
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 92457b7186..f44be72ba2 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
@@ -8,6 +8,7 @@ import graphql.schema.GraphQLList;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLOutputType;
+import graphql.schema.GraphQLType;
import graphql.schema.GraphQLTypeReference;
import lombok.Getter;
@@ -35,7 +36,8 @@ import static
graphql.schema.GraphQLInputObjectType.newInputObject;
import static graphql.schema.GraphQLNonNull.nonNull;
import static graphql.schema.GraphQLObjectType.newObject;
-import static
org.apache.causeway.viewer.graphql.viewer.source.ObjectTypeFactory.GQL_INPUTTYPE_PREFIX;
+import static graphql.schema.GraphQLTypeReference.typeRef;
+import static
org.apache.causeway.viewer.graphql.viewer.source._Constants.GQL_INPUTTYPE_PREFIX;
/**
* A wrapper around {@link ObjectSpecification}
@@ -70,8 +72,7 @@ public class GqlvObjectStructure {
}
public String getLogicalTypeNameSanitized() {
- val logicalTypeName = objectSpec.getLogicalTypeName();
- return _LogicalTypeName.sanitized(logicalTypeName);
+ return _LTN.sanitized(objectSpec);
}
public BeanSort getBeanSort() {
@@ -133,8 +134,7 @@ public class GqlvObjectStructure {
void addPropertiesAsFields() {
- objectSpec.streamProperties(MixedIn.INCLUDED)
- .forEach(this::addPropertyAsField);
+
objectSpec.streamProperties(MixedIn.INCLUDED).forEach(this::addPropertyAsField);
}
private void addPropertyAsField(final OneToOneAssociation otoa) {
@@ -143,16 +143,13 @@ public class GqlvObjectStructure {
case VIEW_MODEL:
case ENTITY:
- String logicalTypeNameOfField =
otoaObjectSpec.getLogicalTypeName();
- GraphQLFieldDefinition.Builder fieldBuilder =
newFieldDefinition()
- .name(otoa.getId())
- .type(otoa.isOptional()
- ? GraphQLTypeReference.typeRef(
-
_LogicalTypeName.sanitized(logicalTypeNameOfField))
- : nonNull(GraphQLTypeReference.typeRef(
-
_LogicalTypeName.sanitized(logicalTypeNameOfField))));
- getGqlObjectTypeBuilder().field(fieldBuilder);
+ GraphQLTypeReference fieldTypeRef =
typeRef(_LTN.sanitized(otoaObjectSpec));
+ getGqlObjectTypeBuilder().field(
+ newFieldDefinition()
+ .name(otoa.getId())
+ .type(otoa.isOptional() ? fieldTypeRef :
nonNull(fieldTypeRef))
+ );
break;
@@ -179,24 +176,25 @@ public class GqlvObjectStructure {
private void addCollection(OneToManyAssociation otom) {
ObjectSpecification elementType = otom.getElementType();
- BeanSort beanSort = elementType.getBeanSort();
- switch (beanSort) {
+ switch (elementType.getBeanSort()) {
case VIEW_MODEL:
case ENTITY:
- String logicalTypeNameOfField =
elementType.getLogicalTypeName();
- GraphQLFieldDefinition.Builder fieldBuilder =
newFieldDefinition()
- .name(otom.getId())
- .type(GraphQLList.list(GraphQLTypeReference.typeRef(
-
_LogicalTypeName.sanitized(logicalTypeNameOfField))));
- gqlObjectTypeBuilder.field(fieldBuilder);
+ GraphQLTypeReference typeRef =
typeRef(_LTN.sanitized(elementType));
+ gqlObjectTypeBuilder.field(
+ newFieldDefinition()
+ .name(otom.getId())
+ .type(GraphQLList.list(typeRef))
+ );
break;
case VALUE:
- GraphQLFieldDefinition.Builder valueBuilder =
newFieldDefinition()
- .name(otom.getId())
-
.type(GraphQLList.list(TypeMapper.typeFor(elementType.getCorrespondingClass())));
- gqlObjectTypeBuilder.field(valueBuilder);
+ GraphQLType wrappedType =
TypeMapper.typeFor(elementType.getCorrespondingClass());
+ gqlObjectTypeBuilder.field(
+ newFieldDefinition()
+ .name(otom.getId())
+ .type(GraphQLList.list(wrappedType))
+ );
break;
}
}
@@ -313,7 +311,7 @@ public class GqlvObjectStructure {
mutatorsTypeIfAny.ifPresent(mutatorsType -> {
GraphQLFieldDefinition gql_mutations = newFieldDefinition()
- .name(ObjectTypeFactory.GQL_MUTATIONS_FIELDNAME)
+ .name(_Constants.GQL_MUTATIONS_FIELDNAME)
.type(mutatorsType)
.build();
getGqlObjectTypeBuilder().field(gql_mutations);
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
index 6f2a7f0fe1..642571b749 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
@@ -44,9 +44,6 @@ import lombok.val;
@Log4j2
public class ObjectTypeFactory {
- final static String GQL_INPUTTYPE_PREFIX = "_gql_input__";
- final static String GQL_MUTATIONS_FIELDNAME = "_gql_mutations";
-
private final GraphQLTypeRegistry graphQLTypeRegistry;
private final BookmarkService bookmarkService;
private final ObjectManager objectManager;
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 a49452f383..2057b68247 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
@@ -62,15 +62,14 @@ public class QueryFieldFactory {
public void queryFieldFromObjectSpecification(
final GraphQLObjectType.Builder queryBuilder,
final GraphQLCodeRegistry.Builder codeRegistryBuilder,
- final ObjectSpecification objectSpecification) {
+ final ObjectSpecification objectSpec) {
- val logicalTypeName = objectSpecification.getLogicalTypeName();
- String logicalTypeNameSanitized =
_LogicalTypeName.sanitized(logicalTypeName);
+ String logicalTypeNameSanitized = _LTN.sanitized(objectSpec);
- serviceRegistry.lookupBeanById(logicalTypeName)
+ serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
.ifPresent(service -> {
- List<ObjectAction> objectActionList =
objectSpecification.streamRuntimeActions(MixedIn.INCLUDED)
+ List<ObjectAction> objectActionList =
objectSpec.streamRuntimeActions(MixedIn.INCLUDED)
.map(ObjectAction.class::cast)
.filter((final ObjectAction x) ->
x.containsFacet(ActionSemanticsFacet.class))
// .filter(x ->
x.getFacet(ActionSemanticsFacet.class).value() == SemanticsOf.SAFE)
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/TypeMapper.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/TypeMapper.java
index cdf79bc6d5..336d0419a3 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/TypeMapper.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/TypeMapper.java
@@ -61,7 +61,7 @@ public class TypeMapper {
case ENTITY:
case VIEW_MODEL:
- return
GraphQLTypeReference.typeRef(ObjectTypeFactory.GQL_INPUTTYPE_PREFIX +
_LogicalTypeName.sanitized(elementType.getLogicalTypeName()));
+ return
GraphQLTypeReference.typeRef(_Constants.GQL_INPUTTYPE_PREFIX +
_LTN.sanitized(elementType));
case VALUE:
return (GraphQLInputType)
typeFor(elementType.getCorrespondingClass());
@@ -101,7 +101,7 @@ public class TypeMapper {
case ABSTRACT:
case ENTITY:
case VIEW_MODEL:
- return
GraphQLTypeReference.typeRef(_LogicalTypeName.sanitized(objectSpecification.getLogicalTypeName()));
+ return
GraphQLTypeReference.typeRef(_LTN.sanitized(objectSpecification));
case VALUE:
return typeFor(objectSpecification.getCorrespondingClass());
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_Constants.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_Constants.java
new file mode 100644
index 0000000000..299cffc0ae
--- /dev/null
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_Constants.java
@@ -0,0 +1,9 @@
+package org.apache.causeway.viewer.graphql.viewer.source;
+
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+public class _Constants {
+ final static String GQL_INPUTTYPE_PREFIX = "_gql_input__";
+ final static String GQL_MUTATIONS_FIELDNAME = "_gql_mutations";
+}
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_LogicalTypeName.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_LTN.java
similarity index 77%
rename from
incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_LogicalTypeName.java
rename to
incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_LTN.java
index fee3851003..e65d1e8298 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_LogicalTypeName.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/_LTN.java
@@ -20,9 +20,14 @@ package org.apache.causeway.viewer.graphql.viewer.source;
import lombok.experimental.UtilityClass;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+
@UtilityClass
-final class _LogicalTypeName {
- static String sanitized(final String name) {
+final class _LTN {
+ static String sanitized(ObjectSpecification objectSpecification) {
+ return sanitized(objectSpecification.getLogicalTypeName());
+ }
+ private static String sanitized(final String name) {
return name.replace('.', '_');
}
}