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 5a385b4bdd CAUSEWAY-3676: refactors GqlvDomainService, use GqlvAction
5a385b4bdd is described below
commit 5a385b4bdde460a8a303985df6cf2de6f9acc0e9
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 10:43:49 2024 +0000
CAUSEWAY-3676: refactors GqlvDomainService, use GqlvAction
---
.../graphql/model/domain/GqlvDomainService.java | 70 +++++++++++-----------
.../viewer/graphql/model/domain/GqlvMember.java | 4 +-
.../graphql/viewer/source/QueryFieldFactory.java | 2 +-
3 files changed, 38 insertions(+), 38 deletions(-)
diff --git
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
index a9d50ac7c9..5e70388021 100644
---
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
+++
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
@@ -1,6 +1,7 @@
package org.apache.causeway.viewer.graphql.model.domain;
import graphql.schema.DataFetcher;
+import graphql.schema.DataFetchingEnvironment;
import graphql.schema.FieldCoordinates;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLCodeRegistry;
@@ -11,6 +12,9 @@ import graphql.schema.GraphQLOutputType;
import lombok.Getter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -24,7 +28,6 @@ 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;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;
@@ -64,17 +67,11 @@ public class GqlvDomainService {
}
- private final _BiMap<ObjectAction, GraphQLFieldDefinition>
safeActionToField = new _BiMap<>();
- private final _BiMap<ObjectAction, GraphQLFieldDefinition>
mutatorActionToField = new _BiMap<>();
-
- public Map<ObjectAction, GraphQLFieldDefinition> getSafeActions() {
- return safeActionToField.getForwardMapAsImmutable();
- }
-
- Map<ObjectAction, GraphQLFieldDefinition> getMutatorActions() {
- return mutatorActionToField.getForwardMapAsImmutable();
- }
+ private final List<GqlvAction> safeActions = new ArrayList<>();
+ public List<GqlvAction> getSafeActions() {return
Collections.unmodifiableList(safeActions);}
+ private final List<GqlvAction> mutatorActions = new ArrayList<>();
+ public List<GqlvAction> getMutatorActions() {return
Collections.unmodifiableList(mutatorActions);}
/**
* @see #getGqlObjectType()
@@ -124,43 +121,46 @@ public class GqlvDomainService {
gqlObjectTypeBuilder.field(fieldDefinition);
// TODO: either safe or mutator
- safeActionToField.put(objectAction, fieldDefinition);
+ safeActions.add(new GqlvAction(objectAction, fieldDefinition));
}
- public void addDataFetcher(
- Map.Entry<ObjectAction, GraphQLFieldDefinition> entry) {
-
- final ObjectAction objectAction = entry.getKey();
- GraphQLFieldDefinition fieldDefinition = entry.getValue();
+ public void addDataFetcher(final GqlvAction gqlvAction) {
+ GraphQLFieldDefinition fieldDefinition =
gqlvAction.getFieldDefinition();
codeRegistryBuilder.dataFetcher(
FieldCoordinates.coordinates(getGqlObjectType(),
fieldDefinition),
- (DataFetcher<Object>) dataFetchingEnvironment -> {
-
- Object domainObjectInstance =
dataFetchingEnvironment.getSource();
+ (DataFetcher<Object>) dataFetchingEnvironment ->
invoke(gqlvAction, dataFetchingEnvironment)
+ );
+ }
- Class<?> domainObjectInstanceClass =
domainObjectInstance.getClass();
- ObjectSpecification specification = specificationLoader
- .loadSpecification(domainObjectInstanceClass);
+ private Object invoke(
+ final GqlvAction gqlvAction,
+ final DataFetchingEnvironment dataFetchingEnvironment) {
+ final ObjectAction objectAction = gqlvAction.getObjectAction();
- ManagedObject owner =
ManagedObject.adaptSingular(specification, domainObjectInstance);
+ Object domainObjectInstance = dataFetchingEnvironment.getSource();
- ActionInteractionHead actionInteractionHead =
objectAction.interactionHead(owner);
+ Class<?> domainObjectInstanceClass = domainObjectInstance.getClass();
+ ObjectSpecification specification = specificationLoader
+ .loadSpecification(domainObjectInstanceClass);
- 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 owner = ManagedObject.adaptSingular(specification,
domainObjectInstance);
- ManagedObject managedObject = objectAction
- .execute(actionInteractionHead, canOfParams,
InteractionInitiatedBy.USER);
+ ActionInteractionHead actionInteractionHead =
objectAction.interactionHead(owner);
- return managedObject.getPojo();
+ 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/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
index 6f3b2b226d..b94d93bef1 100644
---
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
+++
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
@@ -9,8 +9,8 @@ import graphql.schema.GraphQLFieldDefinition;
public abstract class GqlvMember<T extends ObjectMember> {
- @Getter final T objectMember;
- @Getter final GraphQLFieldDefinition fieldDefinition;
+ @Getter private final T objectMember;
+ @Getter private final GraphQLFieldDefinition fieldDefinition;
public GqlvMember(
final T objectMember,
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 411b2171e1..aec733d5de 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
@@ -80,7 +80,7 @@ public class QueryFieldFactory {
domainService.buildObjectGqlType();
-
domainService.getSafeActions().entrySet().forEach(domainService::addDataFetcher);
+ domainService.getSafeActions().forEach(domainService::addDataFetcher);
topLevelQueryStructure.addFieldFor(domainService, codeRegistryBuilder);
}