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 6493c2fb3affefa22909e2c5d233034efe748196 Author: danhaywood <[email protected]> AuthorDate: Thu Jan 25 18:36:20 2024 +0000 CAUSEWAY-3676: introduces Context as a convenience instead of passing 3 domain services around everywhere --- .../{GqlvCollectionGet.java => Context.java} | 45 ++++++++++------------ .../viewer/graphql/model/domain/GqlvAction.java | 21 +++++----- .../graphql/model/domain/GqlvActionInvoke.java | 13 +++---- .../graphql/model/domain/GqlvActionParam.java | 19 ++++----- .../model/domain/GqlvActionParamDisabled.java | 14 +++---- .../model/domain/GqlvActionParamHidden.java | 14 +++---- .../graphql/model/domain/GqlvActionParams.java | 17 ++++---- .../graphql/model/domain/GqlvActionValidate.java | 8 ++-- .../graphql/model/domain/GqlvAssociation.java | 10 ++--- .../graphql/model/domain/GqlvAssociationGet.java | 13 +++---- .../graphql/model/domain/GqlvCollection.java | 18 ++++----- .../graphql/model/domain/GqlvCollectionGet.java | 5 +-- .../graphql/model/domain/GqlvDomainObject.java | 17 ++++---- .../graphql/model/domain/GqlvDomainService.java | 13 ++----- .../viewer/graphql/model/domain/GqlvMember.java | 14 +++---- .../graphql/model/domain/GqlvMemberDisabled.java | 9 ++--- .../graphql/model/domain/GqlvMemberHidden.java | 12 +++--- .../viewer/graphql/model/domain/GqlvMeta.java | 26 ++++++------- .../viewer/graphql/model/domain/GqlvProperty.java | 22 +++++------ .../graphql/model/domain/GqlvPropertyGet.java | 5 +-- .../graphql/model/domain/GqlvPropertySet.java | 13 +++---- .../graphql/model/domain/GqlvPropertyValidate.java | 15 +++----- .../integration/GraphQlSourceForCauseway.java | 17 ++++---- 23 files changed, 152 insertions(+), 208 deletions(-) diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Context.java similarity index 56% copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Context.java index 8e88cda94c..6e7d66147a 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Context.java @@ -18,34 +18,31 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; -import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; -import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; - -import lombok.val; - +import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLCodeRegistry; -import graphql.schema.GraphQLOutputType; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLObjectType; -import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; -public class GqlvCollectionGet extends GqlvAssociationGet<OneToManyAssociation> { +import java.util.LinkedHashMap; +import java.util.Map; - public GqlvCollectionGet( - final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final SpecificationLoader specificationLoader) { - super(holder, codeRegistryBuilder, specificationLoader); - } - - @Override - GraphQLOutputType outputTypeFor(GqlvAssociationGet.Holder<OneToManyAssociation> holder) { - val oneToManyAssociation = holder.getObjectAssociation(); - return TypeMapper.listTypeForElementTypeOf(oneToManyAssociation); - } +import org.apache.causeway.applib.services.bookmark.BookmarkService; +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.core.metamodel.specloader.SpecificationLoader; +import org.apache.causeway.viewer.graphql.model.util.TypeNames; - public interface Holder extends GqlvAssociationGet.Holder<OneToManyAssociation> { +import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; +import static graphql.schema.GraphQLObjectType.newObject; - } +@RequiredArgsConstructor +public class Context { + public final GraphQLCodeRegistry.Builder codeRegistryBuilder; + public final BookmarkService bookmarkService; + public final SpecificationLoader specificationLoader; } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java index f6c1c293c1..1f62e239aa 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java @@ -61,24 +61,21 @@ public class GqlvAction * Populated iif there are params for this action. */ private final GqlvActionParams params; - private final BookmarkService bookmarkService; public GqlvAction( final Holder holder, final ObjectAction objectAction, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService + final Context context ) { - super(holder, objectAction, codeRegistryBuilder); + super(holder, objectAction, context); this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction)); - this.bookmarkService = bookmarkService; - this.hidden = new GqlvMemberHidden(this, codeRegistryBuilder); - this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder); - this.validate = new GqlvActionValidate(this, codeRegistryBuilder); - this.invoke = new GqlvActionInvoke(this, codeRegistryBuilder, bookmarkService); - val params = new GqlvActionParams(this, codeRegistryBuilder, bookmarkService); + this.hidden = new GqlvMemberHidden(this, context); + this.disabled = new GqlvMemberDisabled(this, context); + this.validate = new GqlvActionValidate(this, context); + this.invoke = new GqlvActionInvoke(this, context); + val params = new GqlvActionParams(this, context); this.params = params.hasParams() ? params : null; this.gqlObjectType = gqlObjectTypeBuilder.build(); @@ -176,9 +173,9 @@ public class GqlvAction } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(getField()), - new BookmarkedPojoFetcher(bookmarkService)); + new BookmarkedPojoFetcher(context.bookmarkService)); hidden.addDataFetcher(); disabled.addDataFetcher(); diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java index aaf978202e..666843f2cd 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java @@ -45,18 +45,15 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; public class GqlvActionInvoke { private final Holder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; + private final Context context; private final GraphQLFieldDefinition field; - private final BookmarkService bookmarkService; public GqlvActionInvoke( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService) { + final Context context) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.field = fieldDefinition(holder); - this.bookmarkService = bookmarkService; } private static GraphQLFieldDefinition fieldDefinition(final Holder holder) { @@ -125,7 +122,7 @@ public class GqlvActionInvoke { } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::invoke ); @@ -148,7 +145,7 @@ public class GqlvActionInvoke { val managedObject = ManagedObject.adaptSingular(objectSpecification, sourcePojo); val actionInteractionHead = objectAction.interactionHead(managedObject); - val argumentManagedObjects = GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, bookmarkService); + val argumentManagedObjects = GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context.bookmarkService); val consent = objectAction.isArgumentSetValid(actionInteractionHead, argumentManagedObjects, InteractionInitiatedBy.USER); if (consent.isVetoed()) { diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java index 058fc19f4c..e31ff8276c 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java @@ -22,6 +22,7 @@ import org.apache.causeway.applib.services.bookmark.BookmarkService; 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.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.viewer.graphql.model.util.TypeNames; import lombok.Getter; @@ -40,11 +41,10 @@ public class GqlvActionParam implements GqlvActionParamDisabled.Holder, GqlvActi @Getter private final Holder holder; @Getter private final ObjectActionParameter objectActionParameter; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; + private final Context context; private final GraphQLObjectType.Builder gqlObjectTypeBuilder; private final GraphQLObjectType gqlObjectType; - private final BookmarkService bookmarkService; private final GqlvActionParamHidden hidden; private final GqlvActionParamDisabled disabled; @@ -54,17 +54,14 @@ public class GqlvActionParam implements GqlvActionParamDisabled.Holder, GqlvActi public GqlvActionParam( final Holder holder, final ObjectActionParameter objectActionParameter, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService - ) { + final Context context) { this.holder = holder; this.objectActionParameter = objectActionParameter; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamTypeNameFor(holder.getObjectSpecification(), objectActionParameter)); - this.bookmarkService = bookmarkService; - this.hidden = new GqlvActionParamHidden(this, codeRegistryBuilder, bookmarkService); - this.disabled = new GqlvActionParamDisabled(this, codeRegistryBuilder, bookmarkService); + this.hidden = new GqlvActionParamHidden(this, context); + this.disabled = new GqlvActionParamDisabled(this, context); this.gqlObjectType = gqlObjectTypeBuilder.build(); @@ -91,9 +88,9 @@ public class GqlvActionParam implements GqlvActionParamDisabled.Holder, GqlvActi } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), - new BookmarkedPojoFetcher(bookmarkService)); + new BookmarkedPojoFetcher(context.bookmarkService)); hidden.addDataFetcher(); disabled.addDataFetcher(); diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java index 5d490b4d99..beadbc1654 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java @@ -25,6 +25,7 @@ import org.apache.causeway.core.metamodel.object.ManagedObject; 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.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import lombok.val; @@ -43,29 +44,26 @@ import static org.apache.causeway.viewer.graphql.model.domain.GqlvAction.addGqlA public class GqlvActionParamDisabled { private final Holder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; - private final BookmarkService bookmarkService; + private final Context context; private final GraphQLFieldDefinition field; public GqlvActionParamDisabled( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService) { + final Context context) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition() .name("disabled") .type(TypeMapper.scalarTypeFor(String.class)); addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DISABLE); this.field = holder.addField(fieldBuilder.build()); - this.bookmarkService = bookmarkService; } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::disabled ); @@ -91,7 +89,7 @@ public class GqlvActionParamDisabled { val objectActionParameter = objectAction.getParameterById(holder.getObjectActionParameter().getId()); - val argumentManagedObjects = GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, bookmarkService); + val argumentManagedObjects = GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context.bookmarkService); Consent usable = objectActionParameter.isUsable(actionInteractionHead, argumentManagedObjects, InteractionInitiatedBy.USER); return usable.isVetoed() ? usable.getReasonAsString().orElse("Disabled") : null; diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java index e47205a2c1..638c2594d9 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java @@ -24,6 +24,7 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; +import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import static org.apache.causeway.viewer.graphql.model.domain.GqlvAction.addGqlArguments; @@ -41,29 +42,26 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; public class GqlvActionParamHidden { private final Holder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; - private final BookmarkService bookmarkService; + private final Context context; private final GraphQLFieldDefinition field; public GqlvActionParamHidden( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService) { + final Context context) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition() .name("hidden") .type(TypeMapper.scalarTypeFor(boolean.class)); addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DISABLE); this.field = holder.addField(fieldBuilder.build()); - this.bookmarkService = bookmarkService; } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::hidden ); @@ -88,7 +86,7 @@ public class GqlvActionParamHidden { val objectActionParameter = objectAction.getParameterById(holder.getObjectActionParameter().getId()); - val argumentManagedObjects = GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, bookmarkService); + val argumentManagedObjects = GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context.bookmarkService); Consent visible = objectActionParameter.isVisible(actionInteractionHead, argumentManagedObjects, InteractionInitiatedBy.USER); return visible.isVetoed(); diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java index f19069e292..ae77f7d35e 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java @@ -22,6 +22,7 @@ import org.apache.causeway.applib.services.bookmark.BookmarkService; 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.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.viewer.graphql.model.util.TypeNames; import lombok.Getter; @@ -42,11 +43,10 @@ import static graphql.schema.GraphQLObjectType.newObject; public class GqlvActionParams implements GqlvActionParam.Holder { @Getter private final Holder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; + private final Context context; private final GraphQLObjectType.Builder gqlObjectTypeBuilder; private final GraphQLObjectType gqlObjectType; - private final BookmarkService bookmarkService; /** * Populated iff {@link #hasParams()} @@ -57,13 +57,10 @@ public class GqlvActionParams implements GqlvActionParam.Holder { public GqlvActionParams( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService - ) { + final Context context) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamsTypeNameFor(holder.getObjectSpecification(), holder.getObjectAction())); - this.bookmarkService = bookmarkService; holder.getObjectAction().getParameters().forEach(this::addParam); @@ -92,7 +89,7 @@ public class GqlvActionParams implements GqlvActionParam.Holder { } void addParam(ObjectActionParameter objectActionParameter) { - params.put(objectActionParameter.getId(), new GqlvActionParam(this, objectActionParameter, codeRegistryBuilder, bookmarkService)); + params.put(objectActionParameter.getId(), new GqlvActionParam(this, objectActionParameter, context)); } @@ -103,9 +100,9 @@ public class GqlvActionParams implements GqlvActionParam.Holder { } void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), - new BookmarkedPojoFetcher(bookmarkService)); + new BookmarkedPojoFetcher(context.bookmarkService)); params.forEach((id, param) -> param.addDataFetcher()); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java index d0052c3c23..548740b9f6 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java @@ -44,15 +44,15 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; public class GqlvActionValidate { private final Holder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; + private final Context context; private final GraphQLFieldDefinition field; public GqlvActionValidate( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder + final Context context ) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.field = fieldDefinition(holder); } @@ -76,7 +76,7 @@ public class GqlvActionValidate { } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::validate ); diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java index c665462736..630e9dccf7 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java @@ -29,18 +29,16 @@ public abstract class GqlvAssociation<T extends ObjectAssociation, H extends Gql public GqlvAssociation( final H holder, final T objectAssociation, - final GraphQLCodeRegistry.Builder codeRegistryBuilder - ) { - this(holder, objectAssociation, null, codeRegistryBuilder); + final Context context) { + this(holder, objectAssociation, null, context); } public GqlvAssociation( final H holder, final T objectAssociation, final GraphQLFieldDefinition fieldDefinition, - final GraphQLCodeRegistry.Builder codeRegistryBuilder - ) { - super(holder, objectAssociation, fieldDefinition, codeRegistryBuilder); + final Context context) { + super(holder, objectAssociation, fieldDefinition, context); } public boolean hasFieldDefinition() { diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java index 148020fc59..f3674c301c 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java @@ -35,18 +35,15 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; public abstract class GqlvAssociationGet<T extends ObjectAssociation> { final Holder<T> holder; - final GraphQLCodeRegistry.Builder codeRegistryBuilder; - final SpecificationLoader specificationLoader; + final Context context; final GraphQLFieldDefinition field; public GqlvAssociationGet( final Holder<T> holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final SpecificationLoader specificationLoader) { + final Context context) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.field = fieldDefinition(holder); - this.specificationLoader = specificationLoader; } GraphQLFieldDefinition fieldDefinition(final Holder<T> holder) { @@ -78,7 +75,7 @@ public abstract class GqlvAssociationGet<T extends ObjectAssociation> { case VIEW_MODEL: case ENTITY: - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::get); @@ -94,7 +91,7 @@ public abstract class GqlvAssociationGet<T extends ObjectAssociation> { val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment); val sourcePojoClass = sourcePojo.getClass(); - val objectSpecification = specificationLoader.loadSpecification(sourcePojoClass); + val objectSpecification = context.specificationLoader.loadSpecification(sourcePojoClass); if (objectSpecification == null) { // not expected return null; diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java index 4317e03449..8c2fdb0059 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java @@ -38,22 +38,18 @@ public class GqlvCollection extends GqlvAssociation<OneToManyAssociation, GqlvCo private final GqlvMemberHidden hidden; private final GqlvMemberDisabled disabled; private final GqlvCollectionGet get; - private final BookmarkService bookmarkService; public GqlvCollection( final Holder domainObject, final OneToManyAssociation oneToManyAssociation, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService - ) { - super(domainObject, oneToManyAssociation, codeRegistryBuilder); + final Context context) { + super(domainObject, oneToManyAssociation, context); this.gqlObjectTypeBuilder = newObject().name(TypeNames.collectionTypeNameFor(holder.getObjectSpecification(), oneToManyAssociation)); - this.bookmarkService = bookmarkService; - this.hidden = new GqlvMemberHidden(this, codeRegistryBuilder); - this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder); - this.get = new GqlvCollectionGet(this, codeRegistryBuilder, specificationLoader); + this.hidden = new GqlvMemberHidden(this, context); + this.disabled = new GqlvMemberDisabled(this, context); + this.get = new GqlvCollectionGet(this, context); this.gqlObjectType = gqlObjectTypeBuilder.build(); @@ -83,9 +79,9 @@ public class GqlvCollection extends GqlvAssociation<OneToManyAssociation, GqlvCo } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(getField()), - new BookmarkedPojoFetcher(bookmarkService)); + new BookmarkedPojoFetcher(context.bookmarkService)); hidden.addDataFetcher(); disabled.addDataFetcher(); diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java index 8e88cda94c..3a220f3129 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java @@ -34,9 +34,8 @@ public class GqlvCollectionGet extends GqlvAssociationGet<OneToManyAssociation> public GqlvCollectionGet( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final SpecificationLoader specificationLoader) { - super(holder, codeRegistryBuilder, specificationLoader); + final Context context) { + super(holder, context); } @Override 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 84cc2ff9ff..99a295ccde 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 @@ -50,8 +50,7 @@ import static graphql.schema.GraphQLObjectType.newObject; public class GqlvDomainObject implements GqlvAction.Holder, GqlvProperty.Holder, GqlvCollection.Holder, GqlvMetaHolder { @Getter private final ObjectSpecification objectSpecification; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; - private final BookmarkService bookmarkService; + private final Context context; private final GqlvMeta meta; @@ -67,18 +66,16 @@ public class GqlvDomainObject implements GqlvAction.Holder, GqlvProperty.Holder, public GqlvDomainObject( final ObjectSpecification objectSpecification, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService, + final Context context, final ObjectManager objectManager, final GraphQLTypeRegistry graphQLTypeRegistry) { this.objectSpecification = objectSpecification; - this.codeRegistryBuilder = codeRegistryBuilder; - this.bookmarkService = bookmarkService; + this.context = context; this.gqlObjectTypeBuilder = newObject().name(TypeNames.objectTypeNameFor(objectSpecification)); - this.meta = new GqlvMeta(this, codeRegistryBuilder, bookmarkService, objectManager); + this.meta = new GqlvMeta(this, context, objectManager); GraphQLInputObjectType.Builder inputTypeBuilder = newInputObject().name(TypeNames.inputTypeNameFor(objectSpecification)); inputTypeBuilder @@ -110,16 +107,16 @@ public class GqlvDomainObject implements GqlvAction.Holder, GqlvProperty.Holder, // however, this is supportable in GraphQL, https://chat.openai.com/c/7ca721d5-865a-4765-9f90-5c28046516cd .filter(objectAction -> objectAction.getParameters().stream().noneMatch(ObjectActionParameter::isPlural)) .forEach(objectAction -> { - actions.put(objectAction.getId(), new GqlvAction(this, objectAction, codeRegistryBuilder, bookmarkService)); + actions.put(objectAction.getId(), new GqlvAction(this, objectAction, context)); }); } private void addProperty(final OneToOneAssociation otoa) { - properties.put(otoa.getId(), new GqlvProperty(this, otoa, codeRegistryBuilder, bookmarkService)); + properties.put(otoa.getId(), new GqlvProperty(this, otoa, context)); } private void addCollection(OneToManyAssociation otom) { - GqlvCollection collection = new GqlvCollection(this, otom, codeRegistryBuilder, bookmarkService); + GqlvCollection collection = new GqlvCollection(this, otom, context); if (collection.hasFieldDefinition()) { collections.put(otom.getId(), collection); } 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 a860e8884e..bdd8d96d87 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 @@ -21,7 +21,6 @@ package org.apache.causeway.viewer.graphql.model.domain; import java.util.LinkedHashMap; import java.util.Map; -import org.apache.causeway.applib.services.bookmark.BookmarkService; 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; @@ -32,7 +31,6 @@ import org.apache.causeway.viewer.graphql.model.util.TypeNames; import lombok.Getter; import graphql.schema.FieldCoordinates; -import graphql.schema.GraphQLCodeRegistry; import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLObjectType; @@ -47,8 +45,7 @@ public class GqlvDomainService implements GqlvAction.Holder { @Getter private final ObjectSpecification objectSpecification; @Getter private final Object servicePojo; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; - private final BookmarkService bookmarkService; + private final Context context; private final GraphQLObjectType.Builder gqlObjectTypeBuilder; @@ -66,12 +63,10 @@ public class GqlvDomainService implements GqlvAction.Holder { public GqlvDomainService( final ObjectSpecification objectSpecification, final Object servicePojo, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService) { + final Context context) { this.objectSpecification = objectSpecification; this.servicePojo = servicePojo; - this.codeRegistryBuilder = codeRegistryBuilder; - this.bookmarkService = bookmarkService; + this.context = context; this.gqlObjectTypeBuilder = newObject().name(TypeNames.objectTypeNameFor(objectSpecification)); @@ -95,7 +90,7 @@ public class GqlvDomainService implements GqlvAction.Holder { } private void addAction(final ObjectAction objectAction) { - actions.put(objectAction.getId(), new GqlvAction(this, objectAction, codeRegistryBuilder, bookmarkService)); + actions.put(objectAction.getId(), new GqlvAction(this, objectAction, context)); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java index f8961f9dff..987cb52f28 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java @@ -34,31 +34,29 @@ public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMember.Ho @Getter final H holder; @Getter private final T objectMember; + + final Context context; @Getter @Setter(AccessLevel.PACKAGE) GraphQLFieldDefinition field; - final GraphQLCodeRegistry.Builder codeRegistryBuilder; - final SpecificationLoader specificationLoader; - public GqlvMember( final H holder, final T objectMember, - final GraphQLCodeRegistry.Builder codeRegistryBuilder + final Context context ) { - this(holder, objectMember, null, codeRegistryBuilder); + this(holder, objectMember, null, context); } public GqlvMember( final H holder, final T objectMember, final GraphQLFieldDefinition field, - final GraphQLCodeRegistry.Builder codeRegistryBuilder + final Context context ) { this.holder = holder; this.objectMember = objectMember; this.field = field; - this.codeRegistryBuilder = codeRegistryBuilder; - this.specificationLoader = objectMember.getSpecificationLoader(); + this.context = context; } public String getId() { diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java index c6be053246..b765992697 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java @@ -29,7 +29,6 @@ import lombok.val; import lombok.extern.log4j.Log4j2; import graphql.schema.DataFetchingEnvironment; -import graphql.schema.GraphQLCodeRegistry; import graphql.schema.GraphQLFieldDefinition; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; @@ -38,15 +37,15 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; public class GqlvMemberDisabled { private final Holder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; + private final Context context; private final GraphQLFieldDefinition field; public GqlvMemberDisabled( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder + final Context context ) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.field = fieldDefinition(holder); } @@ -63,7 +62,7 @@ public class GqlvMemberDisabled { } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::disabled ); diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java index ce5f081408..f47b224336 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java @@ -25,29 +25,27 @@ import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectMember; import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import lombok.val; import lombok.extern.log4j.Log4j2; import graphql.schema.DataFetchingEnvironment; -import graphql.schema.GraphQLCodeRegistry; import graphql.schema.GraphQLFieldDefinition; -import lombok.val; - import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; @Log4j2 public class GqlvMemberHidden { private final Holder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; + private final Context context; private final GraphQLFieldDefinition field; public GqlvMemberHidden( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder + final Context context ) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.field = fieldDefinition(holder); } @@ -64,7 +62,7 @@ public class GqlvMemberHidden { } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::hidden ); 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 4b2de8e15a..537ee5f91b 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 @@ -51,22 +51,19 @@ public class GqlvMeta { private final GqlvMetaHolder holder; - private final GraphQLCodeRegistry.Builder codeRegistryBuilder; - private final BookmarkService bookmarkService; + private final Context context; private final ObjectManager objectManager; @Getter private final GraphQLFieldDefinition metaField; public GqlvMeta( final GqlvMetaHolder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService, + final Context context, final ObjectManager objectManager ) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; - this.bookmarkService = bookmarkService; + this.context = context; this.objectManager = objectManager; // we can build the metafield and meta type eagerly because we know exactly which fields it has. @@ -91,24 +88,23 @@ public class GqlvMeta { public void addDataFetchers() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(getMetaField()), - (DataFetcher<Object>) environment -> { - return bookmarkService.bookmarkFor(environment.getSource()) - .map(bookmark -> new Fetcher(bookmark, bookmarkService, objectManager)) - .orElseThrow(); - }); + (DataFetcher<Object>) environment -> + context.bookmarkService.bookmarkFor(environment.getSource()) + .map(bookmark -> new Fetcher(bookmark, context.bookmarkService, objectManager)) + .orElseThrow()); - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( coordinates(getMetaType(), logicalTypeName), (DataFetcher<Object>) environment -> environment.<Fetcher>getSource().logicalTypeName()); - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( coordinates(getMetaType(), id), (DataFetcher<Object>) environment -> environment.<Fetcher>getSource().id()); if (holder.getObjectSpecification().getBeanSort() == BeanSort.ENTITY) { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( coordinates(getMetaType(), version), (DataFetcher<Object>) environment -> environment.<Fetcher>getSource().version()); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java index f7a9ee1ef7..9ac47e791a 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java @@ -45,24 +45,20 @@ public class GqlvProperty private final GqlvPropertyGet get; private final GqlvPropertySet set; private final GqlvPropertyValidate validate; - private final BookmarkService bookmarkService; public GqlvProperty( final Holder holder, final OneToOneAssociation oneToOneAssociation, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final BookmarkService bookmarkService - ) { - super(holder, oneToOneAssociation, codeRegistryBuilder); + final Context context) { + super(holder, oneToOneAssociation, context); this.gqlObjectTypeBuilder = newObject().name(TypeNames.propertyTypeNameFor(this.holder.getObjectSpecification(), oneToOneAssociation)); - this.bookmarkService = bookmarkService; - this.hidden = new GqlvMemberHidden(this, codeRegistryBuilder); - this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder); - this.get = new GqlvPropertyGet(this, codeRegistryBuilder, specificationLoader); - this.set = new GqlvPropertySet(this, codeRegistryBuilder, specificationLoader); - this.validate = new GqlvPropertyValidate(this, codeRegistryBuilder, specificationLoader); + this.hidden = new GqlvMemberHidden(this, context); + this.disabled = new GqlvMemberDisabled(this, context); + this.get = new GqlvPropertyGet(this, context); + this.set = new GqlvPropertySet(this, context); + this.validate = new GqlvPropertyValidate(this, context); this.gqlObjectType = gqlObjectTypeBuilder.build(); @@ -109,9 +105,9 @@ public class GqlvProperty } public void addDataFetcher() { - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(getField()), - new BookmarkedPojoFetcher(bookmarkService)); + new BookmarkedPojoFetcher(context.bookmarkService)); hidden.addDataFetcher(); disabled.addDataFetcher(); diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java index 063646bfb7..8f285b45d8 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java @@ -34,9 +34,8 @@ public class GqlvPropertyGet extends GqlvAssociationGet<OneToOneAssociation> { public GqlvPropertyGet( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final SpecificationLoader specificationLoader) { - super(holder, codeRegistryBuilder, specificationLoader); + final Context context) { + super(holder, context); } @Override diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java index 15468a2806..1c50c02da3 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java @@ -40,18 +40,15 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; public class GqlvPropertySet { final Holder holder; - final GraphQLCodeRegistry.Builder codeRegistryBuilder; - final SpecificationLoader specificationLoader; + final Context context; final GraphQLFieldDefinition field; public GqlvPropertySet( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final SpecificationLoader specificationLoader) { + final Context context) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.field = fieldDefinition(holder); - this.specificationLoader = specificationLoader; } GraphQLFieldDefinition fieldDefinition(final Holder holder) { @@ -85,7 +82,7 @@ public class GqlvPropertySet { case VALUE: case VIEW_MODEL: case ENTITY: - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::set); @@ -100,7 +97,7 @@ public class GqlvPropertySet { val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment); val sourcePojoClass = sourcePojo.getClass(); - val objectSpecification = specificationLoader.loadSpecification(sourcePojoClass); + val objectSpecification = context.specificationLoader.loadSpecification(sourcePojoClass); if (objectSpecification == null) { // not expected return null; diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java index e4431ff18d..c4f8b3273a 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java @@ -25,13 +25,11 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; -import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import lombok.val; import graphql.schema.DataFetchingEnvironment; -import graphql.schema.GraphQLCodeRegistry; import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLOutputType; @@ -40,18 +38,15 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; public class GqlvPropertyValidate { final Holder holder; - final GraphQLCodeRegistry.Builder codeRegistryBuilder; - final SpecificationLoader specificationLoader; + private final Context context; final GraphQLFieldDefinition field; public GqlvPropertyValidate( final Holder holder, - final GraphQLCodeRegistry.Builder codeRegistryBuilder, - final SpecificationLoader specificationLoader) { + final Context context) { this.holder = holder; - this.codeRegistryBuilder = codeRegistryBuilder; + this.context = context; this.field = fieldDefinition(holder); - this.specificationLoader = specificationLoader; } GraphQLFieldDefinition fieldDefinition(final Holder holder) { @@ -86,7 +81,7 @@ public class GqlvPropertyValidate { case VALUE: case VIEW_MODEL: case ENTITY: - codeRegistryBuilder.dataFetcher( + context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(field), this::validate); @@ -101,7 +96,7 @@ public class GqlvPropertyValidate { val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment); val sourcePojoClass = sourcePojo.getClass(); - val objectSpecification = specificationLoader.loadSpecification(sourcePojoClass); + val objectSpecification = context.specificationLoader.loadSpecification(sourcePojoClass); if (objectSpecification == null) { // not expected return null; diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java index 3e9f2be380..ec44a86111 100644 --- a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java +++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java @@ -35,6 +35,7 @@ import org.apache.causeway.applib.services.bookmark.BookmarkService; import org.apache.causeway.core.metamodel.objectmanager.ObjectManager; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.apache.causeway.viewer.graphql.model.domain.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.viewer.toplevel.GqlvTopLevelQuery; @@ -145,11 +146,13 @@ public class GraphQlSourceForCauseway implements GraphQlSource { final GqlvTopLevelQuery gqlvTopLevelQuery, final GraphQLCodeRegistry.Builder codeRegistryBuilder) { + Context context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader); + switch (objectSpec.getBeanSort()) { case MANAGED_BEAN_CONTRIBUTING: // @DomainService - addDomainServiceToTopLevelQuery(objectSpec, gqlvTopLevelQuery, codeRegistryBuilder); + addDomainServiceToTopLevelQuery(objectSpec, gqlvTopLevelQuery, context); break; case ABSTRACT: @@ -157,7 +160,7 @@ public class GraphQlSourceForCauseway implements GraphQlSource { case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL) case ENTITY: // @DomainObject(nature=ENTITY) - new GqlvDomainObject(objectSpec, codeRegistryBuilder, bookmarkService, objectManager, graphQLTypeRegistry); + new GqlvDomainObject(objectSpec, context, objectManager, graphQLTypeRegistry); break; @@ -174,24 +177,24 @@ public class GraphQlSourceForCauseway implements GraphQlSource { public void addDomainServiceToTopLevelQuery( final ObjectSpecification objectSpec, final GqlvTopLevelQuery topLevelQueryStructure, - final GraphQLCodeRegistry.Builder codeRegistryBuilder) { + final Context context) { serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName()) .ifPresent(servicePojo -> - addDomainServiceToTopLevelQuery(servicePojo, objectSpec, topLevelQueryStructure, codeRegistryBuilder)); + addDomainServiceToTopLevelQuery(servicePojo, objectSpec, topLevelQueryStructure, context)); } private void addDomainServiceToTopLevelQuery( final Object servicePojo, final ObjectSpecification objectSpec, final GqlvTopLevelQuery topLevelQuery, - final GraphQLCodeRegistry.Builder codeRegistryBuilder) { + final Context context) { - val domainService = new GqlvDomainService(objectSpec, servicePojo, codeRegistryBuilder, bookmarkService); + val domainService = new GqlvDomainService(objectSpec, servicePojo, context); boolean actionsAdded = domainService.hasActions(); if (actionsAdded) { - topLevelQuery.addFieldFor(domainService, codeRegistryBuilder); + topLevelQuery.addFieldFor(domainService, context.codeRegistryBuilder); }
