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 1df7099678 CAUSEWAY-3676: wip on addActions, to move into
GqlvObjectSpec (3)
1df7099678 is described below
commit 1df70996780dbccfa756000d5a692ffc6254e679
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 13:02:53 2024 +0000
CAUSEWAY-3676: wip on addActions, to move into GqlvObjectSpec (3)
---
.../graphql/viewer/source/GqlvObjectSpec.java | 17 +++++--
.../graphql/viewer/source/ObjectTypeFactory.java | 59 ++++++++--------------
2 files changed, 33 insertions(+), 43 deletions(-)
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
index 28d1da87ef..d4824b5585 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
@@ -2,9 +2,7 @@ package org.apache.causeway.viewer.graphql.viewer.source;
import graphql.Scalars;
import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLInputObjectField;
import graphql.schema.GraphQLInputObjectType;
-import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLList;
import graphql.schema.GraphQLObjectType;
@@ -98,12 +96,21 @@ public class GqlvObjectSpec {
- void addFields() {
+ void addPropertiesAsFields() {
objectSpec.streamProperties(MixedIn.INCLUDED)
- .forEach(this::addField);
+ .forEach(this::addSafeActionAsField);
}
- private void addField(OneToOneAssociation otoa) {
+ public void addSafeActionAsField(GraphQLFieldDefinition fieldDefinition) {
+ getGqlObjectTypeBuilder().field(fieldDefinition);
+ }
+
+ public void addNonSafeActionAsMutatorField(GraphQLFieldDefinition
fieldDefinition) {
+ mutatorsTypeBuilder.field(fieldDefinition);
+ mutatorsTypeFields.add(fieldDefinition);
+ }
+
+ private void addSafeActionAsField(OneToOneAssociation otoa) {
ObjectSpecification otoaObjectSpec = otoa.getElementType();
switch (otoaObjectSpec.getBeanSort()) {
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 ad702c1a6a..b3404e13dc 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
@@ -107,7 +107,7 @@ public class ObjectTypeFactory {
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(inputType);
// add fields
- gqlvObjectSpec.addFields();
+ gqlvObjectSpec.addPropertiesAsFields();
// add collections
gqlvObjectSpec.addCollections();
@@ -211,49 +211,32 @@ public class ObjectTypeFactory {
private static void addAction(
final GqlvObjectSpec gqlvObjectSpec, final ObjectAction
objectAction) {
- final GraphQLObjectType.Builder objectTypeBuilder =
gqlvObjectSpec.getGqlObjectTypeBuilder();
- final GraphQLObjectType.Builder mutatorsTypeBuilder =
gqlvObjectSpec.mutatorsTypeBuilder;
- final List<GraphQLFieldDefinition> mutatorsTypeFields =
gqlvObjectSpec.mutatorsTypeFields;
+ val fieldName = objectAction.getId();
+ GraphQLFieldDefinition.Builder builder = newFieldDefinition()
+ .name(fieldName)
+ .type((GraphQLOutputType)
TypeMapper.typeForObjectAction(objectAction));
+ addArguments(objectAction, builder);
+ GraphQLFieldDefinition fieldDefinition = builder.build();
if (objectAction.getSemantics().isSafeInNature()) {
- String fieldName = objectAction.getId();
- GraphQLFieldDefinition.Builder builder = newFieldDefinition()
- .name(fieldName)
- .type((GraphQLOutputType)
TypeMapper.typeForObjectAction(objectAction));
- if (objectAction.getParameters().isNotEmpty()) {
- builder.arguments(objectAction.getParameters().stream()
- .map(objectActionParameter ->
GraphQLArgument.newArgument()
- .name(objectActionParameter.getId())
- .type(objectActionParameter.isOptional()
- ?
TypeMapper.inputTypeFor(objectActionParameter)
- :
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
- .build())
- .collect(Collectors.toList()));
- }
- objectTypeBuilder.field(builder);
+ gqlvObjectSpec.addSafeActionAsField(fieldDefinition);
} else {
+ gqlvObjectSpec.addNonSafeActionAsMutatorField(fieldDefinition);
+ }
+ }
- String fieldName = objectAction.getId();
- GraphQLFieldDefinition.Builder builder = newFieldDefinition()
- .name(fieldName)
- .type((GraphQLOutputType)
TypeMapper.typeForObjectAction(objectAction));
- if (objectAction.getParameters().isNotEmpty()) {
- builder.arguments(objectAction.getParameters().stream()
- .map(objectActionParameter ->
GraphQLArgument.newArgument()
- .name(objectActionParameter.getId())
- .type(objectActionParameter.isOptional()
- ?
TypeMapper.inputTypeFor(objectActionParameter)
- :
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
- .build())
- .collect(Collectors.toList()));
- }
-
- GraphQLFieldDefinition fieldDefinition = builder.build();
- mutatorsTypeBuilder.field(fieldDefinition);
- mutatorsTypeFields.add(fieldDefinition);
-
+ private static void addArguments(ObjectAction objectAction,
GraphQLFieldDefinition.Builder builder) {
+ if (objectAction.getParameters().isNotEmpty()) {
+ builder.arguments(objectAction.getParameters().stream()
+ .map(objectActionParameter -> GraphQLArgument.newArgument()
+ .name(objectActionParameter.getId())
+ .type(objectActionParameter.isOptional()
+ ?
TypeMapper.inputTypeFor(objectActionParameter)
+ :
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
+ .build())
+ .collect(Collectors.toList()));
}
}