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 032b38f0422e1c0bbf89cc2c5de30dcc7bce9011
Author: danhaywood <[email protected]>
AuthorDate: Sun Jan 21 12:45:11 2024 +0000

    CAUSEWAY-3676: rationalizing domain object vs service; logical type names
---
 .../graphql/model/domain/GqlvDomainObject.java     | 38 ++++++++--------
 .../graphql/model/domain/GqlvDomainService.java    | 50 +++++++++++++---------
 .../viewer/graphql/model/domain/GqlvMutators.java  | 11 +----
 .../viewer/graphql/model/types/TypeMapper.java     |  6 +--
 .../model/util/{_LTN.java => TypeNames.java}       | 15 ++++++-
 .../graphql/viewer/toplevel/GqlvTopLevelQuery.java |  2 +-
 6 files changed, 65 insertions(+), 57 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 293e405a18..48f4ec8dec 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
@@ -18,7 +18,7 @@ import 
org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 import org.apache.causeway.viewer.graphql.model.types._Constants;
-import org.apache.causeway.viewer.graphql.model.util._LTN;
+import org.apache.causeway.viewer.graphql.model.util.TypeNames;
 
 import static 
org.apache.causeway.viewer.graphql.model.types._Constants.GQL_INPUTTYPE_PREFIX;
 
@@ -41,7 +41,7 @@ import static graphql.schema.GraphQLObjectType.newObject;
 import static graphql.schema.GraphQLTypeReference.typeRef;
 
 /**
- * A wrapper around {@link ObjectSpecification}
+ * Exposes a domain object (view model or entity) via the GQL viewer.
  */
 public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, 
GqlvCollectionHolder, GqlvMutatorsHolder {
 
@@ -50,16 +50,13 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
 
     @Getter private final GqlvMeta meta;
     @Getter private final GqlvMutators mutators;
-
-    @Getter private final GraphQLObjectType.Builder objectTypeBuilder;
-    @Getter private final GraphQLInputObjectType gqlInputObjectType;
+    private final GraphQLObjectType.Builder objectTypeBuilder;
 
     String getLogicalTypeName() {
         return objectSpecification.getLogicalTypeName();
     }
-
     public String getLogicalTypeNameSanitized() {
-        return _LTN.sanitized(objectSpecification);
+        return TypeNames.objectTypeNameFor(objectSpecification);
     }
 
     public BeanSort getBeanSort() {
@@ -75,13 +72,12 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
     private final List<GqlvAction> safeActions = new ArrayList<>();
     public List<GqlvAction> getSafeActions() {return 
Collections.unmodifiableList(safeActions);}
 
-
     /**
      * Built using {@link #buildGqlObjectType()}
      */
     private GraphQLObjectType gqlObjectType;
 
-
+    @Getter private final GraphQLInputObjectType gqlInputObjectType;
 
     public GqlvDomainObject(
             final ObjectSpecification objectSpecification,
@@ -90,10 +86,13 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
             final ObjectManager objectManager) {
         this.objectSpecification = objectSpecification;
         this.codeRegistryBuilder = codeRegistryBuilder;
-        this.objectTypeBuilder = 
newObject().name(getLogicalTypeNameSanitized());
 
-        meta = new GqlvMeta(this, codeRegistryBuilder, bookmarkService, 
objectManager);
-        mutators = new GqlvMutators(this, codeRegistryBuilder);
+        this.objectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
+
+        this.meta = new GqlvMeta(this, codeRegistryBuilder, bookmarkService, 
objectManager);
+        this.mutators = new GqlvMutators(this, codeRegistryBuilder);
+
+        objectTypeBuilder.field(meta.getMetaField());
 
         // input object type
         String inputTypeName = GQL_INPUTTYPE_PREFIX + 
getLogicalTypeNameSanitized();
@@ -105,9 +104,6 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                         .build());
         gqlInputObjectType = inputTypeBuilder.build();
 
-        // object type's meta field
-        objectTypeBuilder.field(meta.getMetaField());
-
     }
 
 
@@ -127,11 +123,11 @@ public class GqlvDomainObject implements 
GqlvActionHolder, GqlvPropertyHolder, G
             case VIEW_MODEL:
             case ENTITY:
 
-                GraphQLTypeReference fieldTypeRef = 
typeRef(_LTN.sanitized(otoaObjectSpec));
+                GraphQLTypeReference fieldTypeRef = 
typeRef(TypeNames.objectTypeNameFor(otoaObjectSpec));
                 fieldDefinition = newFieldDefinition()
                         .name(otoa.getId())
                         .type(otoa.isOptional() ? fieldTypeRef : 
nonNull(fieldTypeRef)).build();
-                getObjectTypeBuilder().field(
+                objectTypeBuilder.field(
                         fieldDefinition
                         );
 
@@ -147,7 +143,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                                 ? Scalars.GraphQLString
                                 : nonNull(Scalars.GraphQLString));
                 fieldDefinition = valueBuilder.build();
-                getObjectTypeBuilder().field(fieldDefinition);
+                objectTypeBuilder.field(fieldDefinition);
 
                 break;
         }
@@ -170,7 +166,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
 
             case VIEW_MODEL:
             case ENTITY:
-                GraphQLTypeReference typeRef = 
typeRef(_LTN.sanitized(elementType));
+                GraphQLTypeReference typeRef = 
typeRef(TypeNames.objectTypeNameFor(elementType));
                 fieldDefinition = newFieldDefinition()
                         .name(otom.getId())
                         .type(GraphQLList.list(typeRef)).build();
@@ -211,7 +207,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         if (gqlObjectType != null) {
             throw new IllegalArgumentException(String.format("GqlObjectType 
has already been built for %s", getLogicalTypeName()));
         }
-        return gqlObjectType = 
getObjectTypeBuilder().name(getLogicalTypeNameSanitized()).build();
+        return gqlObjectType = 
objectTypeBuilder.name(getLogicalTypeNameSanitized()).build();
     }
 
     /**
@@ -252,7 +248,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                     .name(_Constants.GQL_MUTATIONS_FIELDNAME)
                     .type(mutatorsType)
                     .build();
-            getObjectTypeBuilder().field(gql_mutations);
+            objectTypeBuilder.field(gql_mutations);
 
         });
 
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 d1b1bb5777..2e6654a925 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,11 +1,5 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import graphql.schema.GraphQLCodeRegistry;
-import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLObjectType;
-
-import lombok.Getter;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -18,47 +12,61 @@ import 
org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.model.types._Constants;
-import org.apache.causeway.viewer.graphql.model.util._LTN;
+import org.apache.causeway.viewer.graphql.model.util.TypeNames;
+
+import lombok.Getter;
+
+import graphql.schema.GraphQLCodeRegistry;
+import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLObjectType;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
+/**
+ * Exposes a domain service (view model or entity) via the GQL viewer.
+ */
 public class GqlvDomainService implements GqlvActionHolder, GqlvMutatorsHolder 
{
 
     @Getter private final ObjectSpecification objectSpecification;
-    @Getter private final Object pojo;
+    @Getter private final Object servicePojo;
     private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
-    private final GqlvMutators mutators;
 
-    private String getLogicalTypeName() {
+    @Getter private final GqlvMutators mutators;
+    private final GraphQLObjectType.Builder objectTypeBuilder;
+
+    String getLogicalTypeName() {
         return objectSpecification.getLogicalTypeName();
     }
+    public String getLogicalTypeNameSanitized() {
+        return TypeNames.objectTypeNameFor(objectSpecification);
+    }
 
-    private final GraphQLObjectType.Builder objectTypeBuilder;
 
+    private final List<GqlvAction> safeActions = new ArrayList<>();
+    public List<GqlvAction> getSafeActions() {return 
Collections.unmodifiableList(safeActions);}
+
+    /**
+     * Built using {@link #buildGqlObjectType()}
+     */
     private GraphQLObjectType gqlObjectType;
 
     public GqlvDomainService(
             final ObjectSpecification objectSpecification,
-            final Object pojo,
+            final Object servicePojo,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder
     ) {
         this.objectSpecification = objectSpecification;
-        this.pojo = pojo;
+        this.servicePojo = servicePojo;
         this.codeRegistryBuilder = codeRegistryBuilder;
 
+        this.objectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
+
         this.mutators = new GqlvMutators(this, codeRegistryBuilder);
 
-        this.objectTypeBuilder = 
newObject().name(_LTN.sanitized(objectSpecification));
     }
 
 
-    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()
      */
@@ -82,7 +90,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
 
     public GraphQLFieldDefinition createTopLevelQueryField() {
         return newFieldDefinition()
-                .name(_LTN.sanitized(objectSpecification))
+                .name(TypeNames.objectTypeNameFor(objectSpecification))
                 .type(objectTypeBuilder)
                 .build();
     }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
index 9c1c273111..a940286da6 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
@@ -1,11 +1,7 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import graphql.schema.GraphQLCodeRegistry;
-import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
-import graphql.schema.GraphQLOutputType;
-
-import lombok.val;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -13,14 +9,11 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
-import org.apache.causeway.viewer.graphql.model.util._LTN;
+import org.apache.causeway.viewer.graphql.model.util.TypeNames;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
-import static 
org.apache.causeway.viewer.graphql.model.domain.GqlvAction.addGqlArguments;
-
 public class GqlvMutators implements GqlvActionHolder {
 
     private final GqlvMutatorsHolder holder;
@@ -41,7 +34,7 @@ public class GqlvMutators implements GqlvActionHolder {
         this.holder = holder;
         this.codeRegistryBuilder = codeRegistryBuilder;
 
-        objectTypeBuilder = 
newObject().name(_LTN.sanitized(this.holder.getObjectSpecification()) + 
"__mutators");
+        objectTypeBuilder = 
newObject().name(TypeNames.mutatorTypeNameFor(this.holder.getObjectSpecification()));
 
     }
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
index ec7dd3d233..be8467cd5e 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
@@ -27,7 +27,7 @@ import 
org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 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.viewer.graphql.model.util._LTN;
+import org.apache.causeway.viewer.graphql.model.util.TypeNames;
 
 import graphql.Scalars;
 import graphql.schema.GraphQLInputType;
@@ -62,7 +62,7 @@ public class TypeMapper {
             case ENTITY:
             case VIEW_MODEL:
 
-                return 
GraphQLTypeReference.typeRef(_Constants.GQL_INPUTTYPE_PREFIX + 
_LTN.sanitized(elementType));
+                return 
GraphQLTypeReference.typeRef(TypeNames.inputTypeNameFor(elementType));
 
             case VALUE:
                 return (GraphQLInputType) 
typeFor(elementType.getCorrespondingClass());
@@ -102,7 +102,7 @@ public class TypeMapper {
             case ABSTRACT:
             case ENTITY:
             case VIEW_MODEL:
-                return 
GraphQLTypeReference.typeRef(_LTN.sanitized(objectSpecification));
+                return 
GraphQLTypeReference.typeRef(TypeNames.objectTypeNameFor(objectSpecification));
 
             case VALUE:
                 return typeFor(objectSpecification.getCorrespondingClass());
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/_LTN.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java
similarity index 69%
rename from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/_LTN.java
rename to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java
index e3206f8651..2438a65226 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/_LTN.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java
@@ -21,13 +21,24 @@ package org.apache.causeway.viewer.graphql.model.util;
 import lombok.experimental.UtilityClass;
 
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.viewer.graphql.model.types._Constants;
 
 @UtilityClass
-public final class _LTN {
-    public static String sanitized(ObjectSpecification objectSpecification) {
+public final class TypeNames {
+    public static String objectTypeNameFor(ObjectSpecification 
objectSpecification) {
         return sanitized(objectSpecification.getLogicalTypeName());
     }
+
+    public static String mutatorTypeNameFor(ObjectSpecification 
objectSpecification) {
+        return objectTypeNameFor(objectSpecification) + "__mutators";
+    }
+
+    public static String inputTypeNameFor(ObjectSpecification 
objectSpecification) {
+        return _Constants.GQL_INPUTTYPE_PREFIX + 
objectTypeNameFor(objectSpecification);
+    }
+
     private static String sanitized(final String name) {
         return name.replace('.', '_');
     }
+
 }
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
index bf350109cf..054cf2e23a 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
@@ -75,7 +75,7 @@ public class GqlvTopLevelQuery {
         codeRegistryBuilder.dataFetcher(
                 // TODO: it would be nice to make these typesafe...
                 FieldCoordinates.coordinates("Query", 
topLevelQueryField.getName()),
-                (DataFetcher<Object>) environment -> domainService.getPojo());
+                (DataFetcher<Object>) environment -> 
domainService.getServicePojo());
 
     }
 

Reply via email to