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('.', '_'); }
