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 dd1c93691d53814ed918aa2dd8a6aa2de96d4529
Author: danhaywood <[email protected]>
AuthorDate: Sun Jan 21 14:23:46 2024 +0000

    CAUSEWAY-3676: inlines Fetcher for GqlvMeta
---
 .../graphql/model/domain/GqlvDomainObject.java     |   2 +-
 .../viewer/graphql/model/domain/GqlvMeta.java      | 105 +++++++++++++--------
 .../graphql/model/domain/GqlvMetaFetcher.java      |  62 ------------
 .../viewer/graphql/model/util/TypeNames.java       |   4 +
 4 files changed, 69 insertions(+), 104 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 e63bff0c50..7ec803d3f2 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
@@ -296,7 +296,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
 //                @Override
 //                public Object get(DataFetchingEnvironment environment) 
throws Exception {
 //
-//                    GqlvMetaFetcher gqlMeta = environment.getSource();
+//                    Fetcher gqlMeta = environment.getSource();
 //
 //                    return gqlMeta.id();
 //                }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
index 365fbff217..84c928f6d0 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
@@ -8,12 +8,17 @@ import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
 import lombok.Getter;
-import lombok.experimental.UtilityClass;
 import lombok.val;
 
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.applib.services.metamodel.BeanSort;
+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.util.TypeNames;
 
 import static graphql.schema.FieldCoordinates.coordinates;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -22,23 +27,9 @@ import static graphql.schema.GraphQLObjectType.newObject;
 
 public class GqlvMeta {
 
-    @UtilityClass
-    static class Fields {
-        static GraphQLFieldDefinition id =
-                newFieldDefinition()
-                        .name("id")
-                        .type(nonNull(Scalars.GraphQLString))
-                        .build();
-        static GraphQLFieldDefinition logicalTypeName =
-                newFieldDefinition()
-                        .name("logicalTypeName")
-                        .type(nonNull(Scalars.GraphQLString))
-                        .build();
-        static GraphQLFieldDefinition version =
-                newFieldDefinition()
-                        .name("version")
-                        .type(Scalars.GraphQLString).build();
-    }
+    static GraphQLFieldDefinition id = 
newFieldDefinition().name("id").type(nonNull(Scalars.GraphQLString)).build();
+    static GraphQLFieldDefinition logicalTypeName = 
newFieldDefinition().name("logicalTypeName").type(nonNull(Scalars.GraphQLString)).build();
+    static GraphQLFieldDefinition version = 
newFieldDefinition().name("version").type(Scalars.GraphQLString).build();
 
     private final GqlvDomainObject domainObject;
 
@@ -60,19 +51,19 @@ public class GqlvMeta {
         this.bookmarkService = bookmarkService;
         this.objectManager = objectManager;
 
-        metaField = 
newFieldDefinition().name("_gql_meta").type(metaType()).build();
+        metaField = 
newFieldDefinition().name("_gql_meta").type(buildMetaType()).build();
     }
 
-    public GraphQLObjectType getMetaType() {
+    GraphQLObjectType getMetaType() {
         return (GraphQLObjectType) metaField.getType();
     }
 
-    private GraphQLObjectType metaType() {
-        val metaTypeBuilder = 
newObject().name(domainObject.getLogicalTypeNameSanitized() + "__meta");
-        metaTypeBuilder.field(GqlvMeta.Fields.id);
-        metaTypeBuilder.field(GqlvMeta.Fields.logicalTypeName);
+    private GraphQLObjectType buildMetaType() {
+        val metaTypeBuilder = 
newObject().name(TypeNames.metaTypeNameFor(domainObject.getObjectSpecification()));
+        metaTypeBuilder.field(id);
+        metaTypeBuilder.field(logicalTypeName);
         if (domainObject.getBeanSort() == BeanSort.ENTITY) {
-            metaTypeBuilder.field(GqlvMeta.Fields.version);
+            metaTypeBuilder.field(version);
         }
         return metaTypeBuilder.build();
     }
@@ -83,31 +74,63 @@ public class GqlvMeta {
                 coordinates(domainObject.getGqlObjectType(), getMetaField()),
                 (DataFetcher<Object>) environment -> {
                     return bookmarkService.bookmarkFor(environment.getSource())
-                            .map(bookmark -> new GqlvMetaFetcher(bookmark, 
bookmarkService, objectManager))
+                            .map(bookmark -> new Fetcher(bookmark, 
bookmarkService, objectManager))
                             .orElse(null); //TODO: is this correct ?
                 });
 
         codeRegistryBuilder.dataFetcher(
-                coordinates(getMetaType(), GqlvMeta.Fields.id),
-                (DataFetcher<Object>) environment -> {
-                    GqlvMetaFetcher gqlvMetaFetcher = environment.getSource();
-                    return gqlvMetaFetcher.id();
-                });
+                coordinates(getMetaType(), id),
+                (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().id());
 
         codeRegistryBuilder.dataFetcher(
-                coordinates(getMetaType(), GqlvMeta.Fields.logicalTypeName),
-                (DataFetcher<Object>) environment -> {
-                    GqlvMetaFetcher gqlvMetaFetcher = environment.getSource();
-                    return gqlvMetaFetcher.logicalTypeName();
-                });
+                coordinates(getMetaType(), logicalTypeName),
+                (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().logicalTypeName());
 
         if (domainObject.getBeanSort() == BeanSort.ENTITY) {
             codeRegistryBuilder.dataFetcher(
-                    coordinates(getMetaType(), GqlvMeta.Fields.version),
-                    (DataFetcher<Object>) environment -> {
-                        GqlvMetaFetcher gqlvMetaFetcher = 
environment.getSource();
-                        return gqlvMetaFetcher.version();
-                    });
+                    coordinates(getMetaType(), version),
+                    (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().version());
+        }
+    }
+
+    /**
+     * Metadata for every domain object.
+     */
+    static class Fetcher {
+
+        private final Bookmark bookmark;
+        private final BookmarkService bookmarkService;
+        private final ObjectManager objectManager;
+
+        Fetcher(
+                final Bookmark bookmark,
+                final BookmarkService bookmarkService,
+                final ObjectManager objectManager) {
+            this.bookmark = bookmark;
+            this.bookmarkService = bookmarkService;
+            this.objectManager = objectManager;
+        }
+
+        public String logicalTypeName(){
+            return bookmark.getLogicalTypeName();
+        }
+
+        public String id(){
+            return bookmark.getIdentifier();
+        }
+
+        public String version(){
+            Object domainObject = 
bookmarkService.lookup(bookmark).orElse(null);
+            if (domainObject == null) {
+                return null;
+            }
+            EntityFacet entityFacet = 
objectManager.adapt(domainObject).getSpecification().getFacet(EntityFacet.class);
+            return Optional.ofNullable(entityFacet)
+                    .map(x -> x.versionOf(domainObject))
+                    .filter(Objects::nonNull)
+                    .map(Object::toString)
+                    .orElse(null);
         }
+
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaFetcher.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaFetcher.java
deleted file mode 100644
index a0bc81cdc8..0000000000
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaFetcher.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.graphql.model.domain;
-
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
-
-import lombok.Data;
-
-import java.util.Objects;
-import java.util.Optional;
-
-/**
- * Metadata for every domain object.
- */
-@Data
-public class GqlvMetaFetcher {
-
-    private final Bookmark bookmark;
-    private final BookmarkService bookmarkService;
-    private final ObjectManager objectManager;
-
-    public String logicalTypeName(){
-        return bookmark.getLogicalTypeName();
-    }
-
-    public String id(){
-        return bookmark.getIdentifier();
-    }
-
-    public String version(){
-        Object domainObject = bookmarkService.lookup(bookmark).orElse(null);
-        if (domainObject == null) {
-            return null;
-        }
-        EntityFacet entityFacet = 
objectManager.adapt(domainObject).getSpecification().getFacet(EntityFacet.class);
-        return Optional.ofNullable(entityFacet)
-                .map(x -> x.versionOf(domainObject))
-                .filter(Objects::nonNull)
-                .map(Object::toString)
-                .orElse(null);
-    }
-
-}
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java
index 2438a65226..076d344eab 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java
@@ -37,6 +37,10 @@ public final class TypeNames {
         return _Constants.GQL_INPUTTYPE_PREFIX + 
objectTypeNameFor(objectSpecification);
     }
 
+    public static String metaTypeNameFor(ObjectSpecification 
objectSpecification) {
+        return objectTypeNameFor(objectSpecification) + "__meta";
+    }
+
     private static String sanitized(final String name) {
         return name.replace('.', '_');
     }

Reply via email to