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

commit 024ff34a45869d4db4b97aaecf7478dbc90f9066
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 16:29:51 2024 +0000

    CAUSEWAY-3676: factors out GqlvDomainObjectMutators
---
 .../graphql/model/domain/GqlvDomainObject.java     | 38 +++--------
 .../model/domain/GqlvDomainObjectMutators.java     | 75 ++++++++++++++++++++++
 2 files changed, 85 insertions(+), 28 deletions(-)

diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index 838c76fa5b..cf814cda4f 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -59,6 +59,8 @@ import static graphql.schema.GraphQLTypeReference.typeRef;
  */
 public class GqlvDomainObject {
 
+    private final GqlvDomainObjectMutators mutators;
+
     @UtilityClass
     static class Fields {
         static GraphQLFieldDefinition id =
@@ -87,7 +89,7 @@ public class GqlvDomainObject {
     @Getter private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
     @Getter private final GraphQLInputObjectType gqlInputObjectType;
 
-    private String getLogicalTypeName() {
+    String getLogicalTypeName() {
         return objectSpec.getLogicalTypeName();
     }
 
@@ -103,11 +105,8 @@ public class GqlvDomainObject {
         return (GraphQLObjectType) metaField.getType();
     }
 
-    String getMutatorsTypeName() {
-        return getLogicalTypeNameSanitized() + "__DomainObject_mutators";
-    }
 
-    final GraphQLObjectType.Builder mutatorsTypeBuilder;
+
 
     private final List<GqlvProperty> properties = new ArrayList<>();
     public List<GqlvProperty> getProperties() {return 
Collections.unmodifiableList(properties);}
@@ -118,19 +117,12 @@ public class GqlvDomainObject {
     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);}
 
     /**
      * Built using {@link #buildGqlObjectType()}
      */
     private GraphQLObjectType gqlObjectType;
 
-    /**
-     * Built lazily using {@link #buildMutatorsTypeIfAny()}
-     */
-    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
-    private Optional<GraphQLObjectType> mutatorsTypeIfAny;
 
 
     public GqlvDomainObject(
@@ -160,7 +152,7 @@ public class GqlvDomainObject {
                         .build());
         gqlInputObjectType = inputTypeBuilder.build();
 
-        mutatorsTypeBuilder = newObject().name(getMutatorsTypeName());
+        mutators = new GqlvDomainObjectMutators(this);
     }
 
 
@@ -304,12 +296,12 @@ public class GqlvDomainObject {
     public void addNonSafeActionAsMutatorField(
             final ObjectAction objectAction,
             final GraphQLFieldDefinition fieldDefinition) {
-        mutatorsTypeBuilder.field(fieldDefinition);
-        mutatorActions.add(new GqlvAction(objectAction, fieldDefinition));
+
+        mutators.addActionAsField(objectAction, fieldDefinition);
     }
 
     boolean hasMutators() {
-        return !mutatorActions.isEmpty();
+        return mutators.hasActions();
     }
 
 
@@ -341,24 +333,14 @@ public class GqlvDomainObject {
      * @see #buildMutatorsTypeIfAny()
      */
     public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
-        //noinspection OptionalAssignedToNull
-        if (mutatorsTypeIfAny == null) {
-            throw new IllegalArgumentException(String.format("Gql MutatorsType 
has not yet been built for %s", getLogicalTypeName()));
-        }
-        return mutatorsTypeIfAny;
+        return mutators.getMutatorsTypeIfAny();
     }
 
     /**
      * @see #getMutatorsTypeIfAny()
      */
     public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
-        //noinspection OptionalAssignedToNull
-        if (mutatorsTypeIfAny != null) {
-            throw new IllegalArgumentException("Gql MutatorsType has already 
been built for " + getLogicalTypeName());
-        }
-        return mutatorsTypeIfAny = hasMutators()
-                ? Optional.of(mutatorsTypeBuilder.build())
-                : Optional.empty();
+        return mutators.buildMutatorsTypeIfAny();
     }
 
     public void addActionsAsFields() {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java
new file mode 100644
index 0000000000..71986cce55
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java
@@ -0,0 +1,75 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLObjectType;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+
+import static graphql.schema.GraphQLObjectType.newObject;
+
+public class GqlvDomainObjectMutators {
+
+    private final GqlvDomainObject domainObject;
+
+    final GraphQLObjectType.Builder mutatorsTypeBuilder;
+
+    /**
+     * Built lazily using {@link #buildMutatorsTypeIfAny()}
+     */
+    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
+    private Optional<GraphQLObjectType> mutatorsTypeIfAny;
+
+    public GqlvDomainObjectMutators(
+            final GqlvDomainObject domainObject) {
+        this.domainObject = domainObject;
+
+        mutatorsTypeBuilder = 
newObject().name(this.domainObject.getLogicalTypeNameSanitized() + 
"__DomainObject_mutators");
+
+    }
+
+    public void addActionAsField(
+            final ObjectAction objectAction,
+            final GraphQLFieldDefinition fieldDefinition) {
+
+        mutatorsTypeBuilder.field(fieldDefinition);
+        actions.add(new GqlvAction(objectAction, fieldDefinition));
+    }
+
+    private final List<GqlvAction> actions = new ArrayList<>();
+    public List<GqlvAction> getActions() {return 
Collections.unmodifiableList(actions);}
+
+    boolean hasActions() {
+        return !actions.isEmpty();
+    }
+
+
+    /**
+     * @see #buildMutatorsTypeIfAny()
+     */
+    public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
+        //noinspection OptionalAssignedToNull
+        if (mutatorsTypeIfAny == null) {
+            throw new IllegalArgumentException(String.format("Gql MutatorsType 
has not yet been built for %s", domainObject.getLogicalTypeName()));
+        }
+        return mutatorsTypeIfAny;
+    }
+
+    /**
+     * @see #getMutatorsTypeIfAny()
+     */
+    public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
+        //noinspection OptionalAssignedToNull
+        if (mutatorsTypeIfAny != null) {
+            throw new IllegalArgumentException("Gql MutatorsType has already 
been built for " + domainObject.getLogicalTypeName());
+        }
+        return mutatorsTypeIfAny = hasActions()
+                ? Optional.of(mutatorsTypeBuilder.build())
+                : Optional.empty();
+    }
+
+}

Reply via email to