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 90c7d99815a1af0ba74b3cb03c0211bc383ce209
Author: danhaywood <[email protected]>
AuthorDate: Sun Feb 11 16:15:31 2024 +0000

    CAUSEWAY-3676: further refactorings
---
 .../viewer/graphql/model/context/Context.java      |  5 +++
 .../graphql/model/domain/GqlvDomainObject.java     | 22 +++++-----
 .../viewer/graphql/model/domain/GqlvMeta.java      | 47 +++++++++++-----------
 .../integration/GraphQlSourceForCauseway.java      |  7 +---
 .../graphql/viewer/toplevel/GqlvTopLevelQuery.java | 12 +-----
 5 files changed, 43 insertions(+), 50 deletions(-)

diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
index 0a9ffe1fbc..aeced311fe 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
@@ -27,9 +27,11 @@ import 
org.apache.causeway.commons.collections.ImmutableEnumSet;
 import org.apache.causeway.commons.functional.Either;
 import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
+import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ActionScope;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.RequiredArgsConstructor;
@@ -39,6 +41,7 @@ import java.util.List;
 
 @RequiredArgsConstructor
 public class Context {
+
     public final GraphQLCodeRegistry.Builder codeRegistryBuilder;
     public final BookmarkService bookmarkService;
     public final SpecificationLoader specificationLoader;
@@ -46,6 +49,8 @@ public class Context {
     public final ServiceRegistry serviceRegistry;
     public final CausewayConfiguration causewayConfiguration;
     public final CausewaySystemEnvironment causewaySystemEnvironment;
+    public final ObjectManager objectManager;
+    public final GraphQLTypeRegistry graphQLTypeRegistry;
 
     public ImmutableEnumSet<ActionScope> getActionScope() {
         return causewaySystemEnvironment.getDeploymentType().isProduction()
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index 7595c0fefb..11016e04b6 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -36,7 +36,6 @@ import static 
graphql.schema.GraphQLInputObjectType.newInputObject;
 import static graphql.schema.GraphQLNonNull.nonNull;
 import static graphql.schema.GraphQLObjectType.newObject;
 
-import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ActionScope;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
@@ -54,8 +53,9 @@ import lombok.val;
 public class GqlvDomainObject
         implements GqlvAction.Holder, GqlvProperty.Holder, 
GqlvCollection.Holder, GqlvMeta.Holder {
 
-    private final Holder holder;
     @Getter private final ObjectSpecification objectSpecification;
+
+    private final Holder holder;
     private final Context context;
 
     @Getter
@@ -69,16 +69,14 @@ public class GqlvDomainObject
     private final SortedMap<String, GqlvCollection> collections = new 
TreeMap<>();
     private final Map<String, GqlvAction> actions = new TreeMap<>();
 
-    private GraphQLObjectType gqlObjectType;
+    private GraphQLObjectType objectType;
 
     @Getter private final GraphQLInputObjectType gqlInputObjectType;
 
     public GqlvDomainObject(
             final GqlvDomainObject.Holder holder,
             final ObjectSpecification objectSpecification,
-            final Context context,
-            final ObjectManager objectManager,
-            final GraphQLTypeRegistry graphQLTypeRegistry) {
+            final Context context) {
         this.holder = holder;
 
         this.objectSpecification = objectSpecification;
@@ -86,7 +84,7 @@ public class GqlvDomainObject
 
         this.gqlObjectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
 
-        this.meta = new GqlvMeta(this, context, objectManager);
+        this.meta = new GqlvMeta(this, context);
 
         GraphQLInputObjectType.Builder inputTypeBuilder = 
newInputObject().name(TypeNames.inputTypeNameFor(objectSpecification));
         inputTypeBuilder
@@ -100,10 +98,10 @@ public class GqlvDomainObject
 
         addMembers();
 
-        gqlObjectType = gqlObjectTypeBuilder.build();
-        graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlObjectType);
-        meta.registerTypesInto(graphQLTypeRegistry);
-        graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlInputObjectType);
+        objectType = gqlObjectTypeBuilder.build();
+
+        context.graphQLTypeRegistry.addTypeIfNotAlreadyPresent(objectType);
+        
context.graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlInputObjectType);
 
     }
 
@@ -183,7 +181,7 @@ public class GqlvDomainObject
 
     @Override
     public FieldCoordinates coordinatesFor(final GraphQLFieldDefinition 
fieldDefinition) {
-        return FieldCoordinates.coordinates(gqlObjectType, fieldDefinition);
+        return FieldCoordinates.coordinates(objectType, fieldDefinition);
     }
 
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
index c8a6482f79..bf0c5f2e1a 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
@@ -38,7 +38,6 @@ import 
org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 
 import lombok.Getter;
 import lombok.val;
@@ -52,60 +51,62 @@ public class GqlvMeta {
     private final Holder holder;
 
     private final Context context;
-    private final ObjectManager objectManager;
 
-    @Getter private final GraphQLFieldDefinition metaField;
+    private final GraphQLObjectType objectType;
+
+    @Getter private final GraphQLFieldDefinition field;
 
     public GqlvMeta(
             final Holder holder,
-            final Context context,
-            final ObjectManager objectManager
+            final Context context
     ) {
         this.holder = holder;
 
         this.context = context;
-        this.objectManager = objectManager;
 
         // we can build the metafield and meta type eagerly because we know 
exactly which fields it has.
-        val metaTypeBuilder = 
newObject().name(TypeNames.metaTypeNameFor(this.holder.getObjectSpecification()));
-        metaTypeBuilder.field(id);
-        metaTypeBuilder.field(logicalTypeName);
+        val objectTypeBuilder = 
newObject().name(TypeNames.metaTypeNameFor(this.holder.getObjectSpecification()));
+
+        objectTypeBuilder.field(id);
+        objectTypeBuilder.field(logicalTypeName);
         if (this.holder.getObjectSpecification().getBeanSort() == 
BeanSort.ENTITY) {
-            metaTypeBuilder.field(version);
+            objectTypeBuilder.field(version);
         }
-        metaField = 
newFieldDefinition().name(context.causewayConfiguration.getViewer().getGraphql().getMetaData().getFieldName()).type(metaTypeBuilder.build()).build();
 
-        holder.addField(metaField);
-    }
+        val fieldName = 
context.causewayConfiguration.getViewer().getGraphql().getMetaData().getFieldName();
 
-    GraphQLObjectType getMetaType() {
-        return (GraphQLObjectType) metaField.getType();
-    }
+        this.objectType = objectTypeBuilder.build();
+        field = newFieldDefinition()
+                        .name(fieldName)
+                        .type(objectType)
+                        .build();
+
+        holder.addField(field);
 
-    void registerTypesInto(GraphQLTypeRegistry graphQLTypeRegistry) {
-        graphQLTypeRegistry.addTypeIfNotAlreadyPresent(getMetaType());
+        context.graphQLTypeRegistry.addTypeIfNotAlreadyPresent(objectType);
     }
 
+
     public void addDataFetchers() {
 
         context.codeRegistryBuilder.dataFetcher(
-                holder.coordinatesFor(getMetaField()),
+                holder.coordinatesFor(getField()),
                 (DataFetcher<Object>) environment ->
                     
context.bookmarkService.bookmarkFor(environment.getSource())
-                        .map(bookmark -> new Fetcher(bookmark, 
context.bookmarkService, objectManager))
+                        .map(bookmark -> new Fetcher(bookmark, 
context.bookmarkService, context.objectManager))
                         .orElseThrow());
 
         context.codeRegistryBuilder.dataFetcher(
-                coordinates(getMetaType(), logicalTypeName),
+                coordinates(objectType, logicalTypeName),
                 (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().logicalTypeName());
 
         context.codeRegistryBuilder.dataFetcher(
-                coordinates(getMetaType(), id),
+                coordinates(objectType, id),
                 (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().id());
 
         if (holder.getObjectSpecification().getBeanSort() == BeanSort.ENTITY) {
             context.codeRegistryBuilder.dataFetcher(
-                    coordinates(getMetaType(), version),
+                    coordinates(objectType, version),
                     (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().version());
         }
     }
diff --git 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 0c0c4c0420..c2827adf8a 100644
--- 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -18,8 +18,6 @@
  */
 package org.apache.causeway.viewer.graphql.viewer.integration;
 
-import java.util.ArrayList;
-
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
@@ -37,7 +35,6 @@ import 
org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainObject;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelQuery;
 
@@ -101,10 +98,10 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
         }
 
         val codeRegistryBuilder = GraphQLCodeRegistry.newCodeRegistry();
-        val context = new Context(codeRegistryBuilder, bookmarkService, 
specificationLoader, typeMapper, serviceRegistry, causewayConfiguration, 
causewaySystemEnvironment);
+        val context = new Context(codeRegistryBuilder, bookmarkService, 
specificationLoader, typeMapper, serviceRegistry, causewayConfiguration, 
causewaySystemEnvironment, objectManager, graphQLTypeRegistry);
 
         // top-level query and mutation type
-        val topLevelQuery = new GqlvTopLevelQuery(context, objectManager, 
graphQLTypeRegistry);
+        val topLevelQuery = new GqlvTopLevelQuery(context);
         val topLevelMutation =
                 causewayConfiguration.getViewer().getGraphql().getApiVariant() 
== CausewayConfiguration.Viewer.Graphql.ApiVariant.QUERY_AND_MUTATIONS ?
                         new GqlvTopLevelMutation(context)
diff --git 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
index 53f87e4887..693996f8bb 100644
--- 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
+++ 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
@@ -9,15 +9,12 @@ import graphql.schema.GraphQLObjectType;
 
 import static graphql.schema.GraphQLObjectType.newObject;
 
-import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainObject;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
-import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 
 import lombok.Getter;
-import lombok.val;
 
 public class GqlvTopLevelQuery implements GqlvDomainService.Holder, 
GqlvDomainObject.Holder {
 
@@ -28,14 +25,9 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
 
     private final List<GqlvDomainService> domainServices = new ArrayList<>();
     private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
-    private final Context context;
 
-    public GqlvTopLevelQuery(
-            final Context context,
-            final ObjectManager objectManager,
-            final GraphQLTypeRegistry graphQLTypeRegistry) {
+    public GqlvTopLevelQuery(final Context context) {
 
-        this.context = context;
         this.objectTypeBuilder = newObject().name(OBJECT_TYPE_NAME);
 
         context.objectSpecifications().forEach(objectSpec -> {
@@ -45,7 +37,7 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
                 case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
                 case ENTITY:     // @DomainObject(nature=ENTITY)
 
-                    domainObjects.add(new GqlvDomainObject(this, objectSpec, 
context, objectManager, graphQLTypeRegistry));
+                    domainObjects.add(new GqlvDomainObject(this, objectSpec, 
context));
 
                     break;
             }

Reply via email to