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 ab56ab5ed3 CAUSEWAY-3676: combines GqlvServiceStructure and Behaviour
into GqlvDomainService
ab56ab5ed3 is described below
commit ab56ab5ed309d3132955866d89f091d65a02efe9
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 10:37:59 2024 +0000
CAUSEWAY-3676: combines GqlvServiceStructure and Behaviour into
GqlvDomainService
---
...erviceStructure.java => GqlvDomainService.java} | 60 ++++++++++++++++++-
.../viewer/source/GqlvServiceBehaviour.java | 68 ----------------------
.../viewer/source/GqlvTopLevelQueryStructure.java | 9 ++-
.../graphql/viewer/source/QueryFieldFactory.java | 12 ++--
4 files changed, 66 insertions(+), 83 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/GqlvDomainService.java
similarity index 55%
rename from
incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
rename to
incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvDomainService.java
index 7f792cec9a..badded558e 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/GqlvDomainService.java
@@ -1,6 +1,9 @@
package org.apache.causeway.viewer.graphql.viewer.source;
+import graphql.schema.DataFetcher;
+import graphql.schema.FieldCoordinates;
import graphql.schema.GraphQLArgument;
+import graphql.schema.GraphQLCodeRegistry;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLObjectType;
@@ -11,8 +14,14 @@ import lombok.Getter;
import java.util.Map;
import java.util.stream.Collectors;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
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.ObjectActionParameter;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import org.apache.causeway.viewer.graphql.model.util._LTN;
import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
import org.apache.causeway.viewer.graphql.model.util._BiMap;
@@ -20,9 +29,12 @@ import org.apache.causeway.viewer.graphql.model.util._BiMap;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;
-public class GqlvServiceStructure {
+public class GqlvDomainService {
- @Getter private final ObjectSpecification serviceSpec;
+ private final ObjectSpecification serviceSpec;
+ @Getter private final Object pojo;
+ private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
+ private final SpecificationLoader specificationLoader;
private String getLogicalTypeName() {
@@ -37,9 +49,16 @@ public class GqlvServiceStructure {
private GraphQLObjectType gqlObjectType;
- public GqlvServiceStructure(final ObjectSpecification serviceSpec
+ public GqlvDomainService(
+ final ObjectSpecification serviceSpec,
+ final Object pojo,
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+ final SpecificationLoader specificationLoader
) {
this.serviceSpec = serviceSpec;
+ this.pojo = pojo;
+ this.codeRegistryBuilder = codeRegistryBuilder;
+ this.specificationLoader = specificationLoader;
this.gqlObjectTypeBuilder =
newObject().name(_LTN.sanitized(serviceSpec));
}
@@ -110,4 +129,39 @@ public class GqlvServiceStructure {
}
+ public void addDataFetcher(
+ Map.Entry<ObjectAction, GraphQLFieldDefinition> entry) {
+
+ final ObjectAction objectAction = entry.getKey();
+ GraphQLFieldDefinition fieldDefinition = entry.getValue();
+
+ codeRegistryBuilder.dataFetcher(
+ FieldCoordinates.coordinates(getGqlObjectType(),
fieldDefinition),
+ (DataFetcher<Object>) dataFetchingEnvironment -> {
+
+ Object domainObjectInstance =
dataFetchingEnvironment.getSource();
+
+ Class<?> domainObjectInstanceClass =
domainObjectInstance.getClass();
+ ObjectSpecification specification = specificationLoader
+ .loadSpecification(domainObjectInstanceClass);
+
+ ManagedObject owner =
ManagedObject.adaptSingular(specification, domainObjectInstance);
+
+ ActionInteractionHead actionInteractionHead =
objectAction.interactionHead(owner);
+
+ Map<String, Object> arguments =
dataFetchingEnvironment.getArguments();
+ Can<ObjectActionParameter> parameters =
objectAction.getParameters();
+ Can<ManagedObject> canOfParams = parameters
+ .map(oap -> {
+ Object argumentValue =
arguments.get(oap.getId());
+ return ManagedObject.adaptParameter(oap,
argumentValue);
+ });
+
+ ManagedObject managedObject = objectAction
+ .execute(actionInteractionHead, canOfParams,
InteractionInitiatedBy.USER);
+
+ return managedObject.getPojo();
+ });
+ }
+
}
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
deleted file mode 100644
index 454aa2b20e..0000000000
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.apache.causeway.viewer.graphql.viewer.source;
-
-import graphql.schema.DataFetcher;
-import graphql.schema.FieldCoordinates;
-import graphql.schema.GraphQLCodeRegistry;
-
-import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLObjectType;
-
-import lombok.RequiredArgsConstructor;
-
-import java.util.Map;
-
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
-import
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-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.ObjectActionParameter;
-import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
-
-@RequiredArgsConstructor
-public class GqlvServiceBehaviour {
-
- private final GqlvServiceStructure structure;
- final Object service;
- private final SpecificationLoader specificationLoader;
- private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
-
-
- public void addDataFetcher(
- Map.Entry<ObjectAction, GraphQLFieldDefinition> entry) {
-
- final ObjectAction objectAction = entry.getKey();
- GraphQLFieldDefinition fieldDefinition = entry.getValue();
-
- final GraphQLObjectType graphQLObjectType =
structure.getGqlObjectType();
-
- codeRegistryBuilder.dataFetcher(
- FieldCoordinates.coordinates(graphQLObjectType,
fieldDefinition),
- (DataFetcher<Object>) dataFetchingEnvironment -> {
-
- Object domainObjectInstance =
dataFetchingEnvironment.getSource();
-
- Class<?> domainObjectInstanceClass =
domainObjectInstance.getClass();
- ObjectSpecification specification = specificationLoader
- .loadSpecification(domainObjectInstanceClass);
-
- ManagedObject owner =
ManagedObject.adaptSingular(specification, domainObjectInstance);
-
- ActionInteractionHead actionInteractionHead =
objectAction.interactionHead(owner);
-
- Map<String, Object> arguments =
dataFetchingEnvironment.getArguments();
- Can<ObjectActionParameter> parameters =
objectAction.getParameters();
- Can<ManagedObject> canOfParams = parameters
- .map(oap -> {
- Object argumentValue =
arguments.get(oap.getId());
- return ManagedObject.adaptParameter(oap,
argumentValue);
- });
-
- ManagedObject managedObject = objectAction
- .execute(actionInteractionHead, canOfParams,
InteractionInitiatedBy.USER);
-
- return managedObject.getPojo();
- });
- }
-}
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
index e813aa5a7b..caa002ac80 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
@@ -55,17 +55,16 @@ public class GqlvTopLevelQueryStructure {
}
public void addFieldFor(
- final GqlvServiceStructure serviceStructure,
- final GqlvServiceBehaviour serviceBehaviour,
+ final GqlvDomainService domainService,
final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
- GraphQLFieldDefinition topLevelQueryField =
serviceStructure.createTopLevelQueryField();
- queryBuilder.field(serviceStructure.createTopLevelQueryField());
+ GraphQLFieldDefinition topLevelQueryField =
domainService.createTopLevelQueryField();
+ queryBuilder.field(domainService.createTopLevelQueryField());
codeRegistryBuilder.dataFetcher(
// TODO: it would be nice to make these typesafe...
FieldCoordinates.coordinates("Query",
topLevelQueryField.getName()),
- (DataFetcher<Object>) environment -> serviceBehaviour.service);
+ (DataFetcher<Object>) environment -> domainService.getPojo());
}
}
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 90a46133c1..99ab50c1e5 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
@@ -64,7 +64,7 @@ public class QueryFieldFactory {
final GqlvTopLevelQueryStructure topLevelQueryStructure,
final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
- val serviceStructure = new GqlvServiceStructure(serviceSpec);
+ val domainService = new GqlvDomainService(serviceSpec, service,
codeRegistryBuilder, specificationLoader);
List<ObjectAction> objectActionList =
serviceSpec.streamRuntimeActions(MixedIn.INCLUDED)
.map(ObjectAction.class::cast)
@@ -74,15 +74,13 @@ public class QueryFieldFactory {
return;
}
- objectActionList.forEach(serviceStructure::addAction);
+ objectActionList.forEach(domainService::addAction);
- serviceStructure.buildObjectGqlType();
+ domainService.buildObjectGqlType();
- GqlvServiceBehaviour serviceBehaviour = new
GqlvServiceBehaviour(serviceStructure, service, specificationLoader,
codeRegistryBuilder);
+
domainService.getSafeActions().entrySet().forEach(domainService::addDataFetcher);
-
serviceStructure.getSafeActions().entrySet().forEach(serviceBehaviour::addDataFetcher);
-
- topLevelQueryStructure.addFieldFor(serviceStructure, serviceBehaviour,
codeRegistryBuilder);
+ topLevelQueryStructure.addFieldFor(domainService, codeRegistryBuilder);
}
}