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 acac2b2721c7918c540e80f14ac9b87781e5df45 Author: danhaywood <[email protected]> AuthorDate: Mon Feb 12 11:47:32 2024 +0000 CAUSEWAY-3676: wip, refactors --- .../viewer/graphql/model/domain/GqlvAction.java | 33 +++++++++++---- .../graphql/model/domain/GqlvActionInvoke.java | 5 ++- .../graphql/model/domain/GqlvActionParam.java | 49 ++++++++++++++++------ .../model/domain/GqlvActionParamAutoComplete.java | 5 ++- .../model/domain/GqlvActionParamChoices.java | 5 ++- .../model/domain/GqlvActionParamDefault.java | 5 ++- .../model/domain/GqlvActionParamDisabled.java | 5 ++- .../model/domain/GqlvActionParamHidden.java | 5 ++- .../model/domain/GqlvActionParamValidate.java | 5 ++- .../graphql/model/domain/GqlvActionParams.java | 17 ++++---- .../graphql/model/domain/GqlvActionValidity.java | 17 +++----- .../graphql/model/domain/GqlvAssociationGet.java | 15 +++---- .../graphql/model/domain/GqlvCollection.java | 20 +++++---- .../graphql/model/domain/GqlvDomainObject.java | 17 +++++--- .../graphql/model/domain/GqlvDomainService.java | 27 ++++++------ .../viewer/graphql/model/domain/GqlvHolder.java | 5 --- .../viewer/graphql/model/domain/GqlvMember.java | 1 + .../graphql/model/domain/GqlvMemberDisabled.java | 7 ++-- .../graphql/model/domain/GqlvMemberHidden.java | 7 ++-- .../viewer/graphql/model/domain/GqlvMeta.java | 2 - .../model/domain/GqlvMutationForAction.java | 5 ++- .../model/domain/GqlvMutationForProperty.java | 5 ++- .../viewer/graphql/model/domain/GqlvProperty.java | 41 +++++++++++++----- .../model/domain/GqlvPropertyAutoComplete.java | 5 ++- .../graphql/model/domain/GqlvPropertyChoices.java | 5 ++- .../graphql/model/domain/GqlvPropertySet.java | 21 ++++------ .../graphql/model/domain/GqlvPropertyValidate.java | 5 ++- .../viewer/graphql/model/domain/GqlvScenario.java | 11 ++--- .../graphql/model/domain/GqlvScenarioGiven.java | 20 +++++---- .../graphql/model/domain/GqlvScenarioName.java | 5 ++- .../viewer/toplevel/GqlvTopLevelMutation.java | 15 ++++--- .../graphql/viewer/toplevel/GqlvTopLevelQuery.java | 18 ++++---- 32 files changed, 242 insertions(+), 166 deletions(-) diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java index e684fd972a..cf6f34c507 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java @@ -83,22 +83,36 @@ public class GqlvAction this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction)); this.hidden = new GqlvMemberHidden<>(this, context); + addField(hidden.getField()); this.disabled = new GqlvMemberDisabled<>(this, context); + addField(disabled.getField()); this.validate = new GqlvActionValidity(this, context); + addField(validate.getField()); val variant = context.causewayConfiguration.getViewer().getGraphql().getApiVariant(); - this.invoke = objectAction.getSemantics().isSafeInNature() || variant == QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT - ? new GqlvActionInvoke(this, context) - : null; + if (objectAction.getSemantics().isSafeInNature() || variant == QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT) { + this.invoke = new GqlvActionInvoke(this, context); + GraphQLFieldDefinition invokeField = this.invoke.getField(); + if (invokeField != null) { + addField(invokeField); + } + } else { + this.invoke = null; + } val params = new GqlvActionParams(this, context); - this.params = params.hasParams() ? params : null; + if (params.hasParams()) { + this.params = params; + addField(params.getField()); + } else { + this.params = null; + } this.gqlObjectType = gqlObjectTypeBuilder.build(); - this.field = holder.addField(newFieldDefinition() + this.field = newFieldDefinition() .name(objectAction.getId()) .type(gqlObjectTypeBuilder) - .build()); + .build(); } public Can<ManagedObject> argumentManagedObjectsFor( @@ -244,9 +258,10 @@ public class GqlvAction return getObjectMember(); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java index b12284119b..0b004088dc 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java @@ -44,6 +44,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; +import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -52,7 +53,7 @@ public class GqlvActionInvoke { private final Holder holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionInvoke( final Holder holder, @@ -68,7 +69,7 @@ public class GqlvActionInvoke { .name(fieldNameForSemanticsOf(objectAction)) .type(type); holder.addGqlArguments(objectAction, fieldBuilder, TypeMapper.InputContext.INVOKE, objectAction.getParameterCount()); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java index 2d9ab9c06d..d1c1dd27ab 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java @@ -60,7 +60,7 @@ public class GqlvActionParam private final GraphQLObjectType gqlObjectType; private final GqlvActionParamHidden hidden; - private final GqlvActionParamDisabled validate; + private final GqlvActionParamDisabled disabled; /** * Populated iff there are choices for this param */ @@ -73,9 +73,9 @@ public class GqlvActionParam * Populated iff there is a default for this param */ private final GqlvActionParamDefault default_; - private final GqlvActionParamValidate disabled; + private final GqlvActionParamValidate validate; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionParam( final Holder holder, @@ -89,21 +89,43 @@ public class GqlvActionParam this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamTypeNameFor(holder.getObjectSpecification(), objectActionParameter)); this.hidden = new GqlvActionParamHidden(this, context); - this.disabled = new GqlvActionParamValidate(this, context); + addField(hidden.getField()); + this.disabled = new GqlvActionParamDisabled(this, context); + addField(disabled.getField()); + val choices = new GqlvActionParamChoices(this, context); - this.choices = choices.hasChoices() ? choices : null; + addField(choices.getField()); + if (choices.hasChoices()) { + this.choices = choices; + } else { + this.choices = null; + } + val autoComplete = new GqlvActionParamAutoComplete(this, context); - this.autoComplete = autoComplete.hasAutoComplete() ? autoComplete : null; + addField(autoComplete.getField()); + if (autoComplete.hasAutoComplete()) { + this.autoComplete = autoComplete; + } else { + this.autoComplete = null; + } + val default_ = new GqlvActionParamDefault(this, context); - this.default_ = default_.hasDefault() ? default_ : null; - this.validate = new GqlvActionParamDisabled(this, context); + addField(default_.getField()); + if (default_.hasDefault()) { + this.default_ = default_; + } else { + this.default_ = null; + } + + this.validate = new GqlvActionParamValidate(this, context); + addField(validate.getField()); this.gqlObjectType = gqlObjectTypeBuilder.build(); - this.field = holder.addField(newFieldDefinition() + this.field = newFieldDefinition() .name(objectActionParameter.getId()) .type(gqlObjectTypeBuilder) - .build()); + .build(); } @Override @@ -121,9 +143,10 @@ public class GqlvActionParam return holder.getObjectAction(); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java index f519510de8..f9adb7bbbd 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java @@ -45,6 +45,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; + import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -59,7 +60,7 @@ package org.apache.causeway.viewer.graphql.model.domain; /** * Populated iff there is an autocomplete for this parameter. */ - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionParamAutoComplete( final Holder holder, @@ -78,7 +79,7 @@ package org.apache.causeway.viewer.graphql.model.domain; .name(SEARCH_PARAM_NAME) .type(nonNull(context.typeMapper.scalarTypeFor(String.class)))) .build(); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java index d6dc002eaa..68066bcc3f 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java @@ -43,6 +43,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; + import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -55,7 +56,7 @@ package org.apache.causeway.viewer.graphql.model.domain; /** * Populated iff there are choices for this parameter. */ - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionParamChoices( final Holder holder, @@ -70,7 +71,7 @@ package org.apache.causeway.viewer.graphql.model.domain; .name("choices") .type(GraphQLList.list(context.typeMapper.outputTypeFor(elementType))); holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.CHOICES, holder.getParamNum()); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java index b69b092b08..4d76b79dd2 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java @@ -39,6 +39,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; + import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -51,7 +52,7 @@ package org.apache.causeway.viewer.graphql.model.domain; /** * Populated iff there are choices for this parameter. */ - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionParamDefault( final Holder holder, @@ -67,7 +68,7 @@ package org.apache.causeway.viewer.graphql.model.domain; .name("default") .type(context.typeMapper.outputTypeFor(elementType)); holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DEFAULT, holder.getParamNum()); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java index 5ebea26bf6..e3662dfd1d 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java @@ -35,6 +35,7 @@ import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParamete import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; +import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -45,7 +46,7 @@ public class GqlvActionParamDisabled { private final Holder holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionParamDisabled( final Holder holder, @@ -57,7 +58,7 @@ public class GqlvActionParamDisabled { .name("disabled") .type(context.typeMapper.scalarTypeFor(String.class)); holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DISABLE, holder.getParamNum()+1); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java index 6c62bd3b04..7ef7359fa5 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java @@ -35,6 +35,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; + import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -44,7 +45,7 @@ public class GqlvActionParamHidden { private final Holder holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionParamHidden( final Holder holder, @@ -56,7 +57,7 @@ public class GqlvActionParamHidden { .name("hidden") .type(context.typeMapper.scalarTypeFor(boolean.class)); holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DISABLE, holder.getParamNum()); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java index 7edf570c52..04aa28c81c 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java @@ -35,6 +35,7 @@ import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParamete import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; +import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -44,7 +45,7 @@ public class GqlvActionParamValidate { private final Holder holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionParamValidate( final Holder holder, @@ -56,7 +57,7 @@ public class GqlvActionParamValidate { .name("validity") .type(context.typeMapper.scalarTypeFor(String.class)); holder.addGqlArgument(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DISABLE, holder.getParamNum()); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java index b3ec3f35ed..7f864793c4 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java @@ -58,7 +58,7 @@ public class GqlvActionParams implements GqlvActionParam.Holder { /** * Populated iff {@link #hasParams()} */ - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; private final Map<String, GqlvActionParam> params = new LinkedHashMap<>(); @@ -77,10 +77,10 @@ public class GqlvActionParams implements GqlvActionParam.Holder { this.gqlObjectType = gqlObjectTypeBuilder.build(); this.field = hasParams() ? - holder.addField(newFieldDefinition() + newFieldDefinition() .name("params") .type(gqlObjectTypeBuilder) - .build()) + .build() : null; } @@ -104,13 +104,16 @@ public class GqlvActionParams implements GqlvActionParam.Holder { } void addParam(ObjectActionParameter objectActionParameter, int paramNum) { - params.put(objectActionParameter.getId(), new GqlvActionParam(this, objectActionParameter, context, paramNum)); + GqlvActionParam gqlvActionParam = new GqlvActionParam(this, objectActionParameter, context, paramNum); + addField(gqlvActionParam.getField()); + params.put(objectActionParameter.getId(), gqlvActionParam); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java index ea20bab613..bb03187654 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java @@ -38,6 +38,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; +import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -46,7 +47,7 @@ public class GqlvActionValidity { private final Holder holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvActionValidity( final Holder holder, @@ -54,26 +55,20 @@ public class GqlvActionValidity { ) { this.holder = holder; this.context = context; - this.field = fieldDefinition(holder); - } - - private GraphQLFieldDefinition fieldDefinition(final Holder holder) { val objectAction = holder.getObjectAction(); - GraphQLFieldDefinition fieldDefinition = null; - GraphQLOutputType type = context.typeMapper.scalarTypeFor(String.class); + GraphQLOutputType type = this.context.typeMapper.scalarTypeFor(String.class); if (type != null) { val fieldBuilder = newFieldDefinition() .name("validate") .type(type); holder.addGqlArguments(objectAction, fieldBuilder, TypeMapper.InputContext.VALIDATE, objectAction.getParameterCount()); - fieldDefinition = fieldBuilder.build(); - - holder.addField(fieldDefinition); + this.field = fieldBuilder.build(); + } else { + this.field = null; } - return fieldDefinition; } public void addDataFetcher() { diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java index b36b804e61..743e6ad346 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java @@ -31,35 +31,30 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; +import lombok.Getter; import lombok.val; public abstract class GqlvAssociationGet<T extends ObjectAssociation> { final Holder<T> holder; final Context context; - final GraphQLFieldDefinition field; + @Getter final GraphQLFieldDefinition field; public GqlvAssociationGet( final Holder<T> holder, final Context context) { this.holder = holder; this.context = context; - this.field = fieldDefinition(holder); - } - - GraphQLFieldDefinition fieldDefinition(final Holder<T> holder) { - GraphQLFieldDefinition fieldDefinition = null; GraphQLOutputType type = outputTypeFor(holder); if (type != null) { val fieldBuilder = newFieldDefinition() .name("get") .type(type); - fieldDefinition = fieldBuilder.build(); - - holder.addField(fieldDefinition); + this.field = fieldBuilder.build(); + } else { + this.field = null; } - return fieldDefinition; } abstract GraphQLOutputType outputTypeFor(Holder<T> holder); diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java index f1cb35e937..ca5ece1651 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java @@ -51,18 +51,19 @@ public class GqlvCollection this.gqlObjectTypeBuilder = newObject().name(TypeNames.collectionTypeNameFor(holder.getObjectSpecification(), oneToManyAssociation)); this.hidden = new GqlvMemberHidden<>(this, context); + addField(hidden.getField()); this.disabled = new GqlvMemberDisabled<>(this, context); + addField(disabled.getField()); this.get = new GqlvCollectionGet(this, context); + addField(get.getField()); this.gqlObjectType = gqlObjectTypeBuilder.build(); setField( - holder.addField( - newFieldDefinition() - .name(oneToManyAssociation.getId()) - .type(gqlObjectTypeBuilder) - .build() - ) + newFieldDefinition() + .name(oneToManyAssociation.getId()) + .type(gqlObjectTypeBuilder) + .build() ); } @@ -75,9 +76,10 @@ public class GqlvCollection return getObjectAssociation(); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } 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 cc05e527bb..3079192058 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 @@ -95,6 +95,7 @@ public class GqlvDomainObject this.gqlObjectTypeBuilder = newObject().name(TypeNames.objectTypeNameFor(objectSpecification)); this.meta = new GqlvMeta(this, context); + addField(meta.getField()); GraphQLInputObjectType.Builder inputTypeBuilder = newInputObject().name(TypeNames.inputTypeNameFor(objectSpecification)); inputTypeBuilder @@ -142,7 +143,9 @@ public class GqlvDomainObject objectSpecification.streamActions(context.getActionScope(), MixedIn.INCLUDED) .forEach(objectAction -> { - actions.put(objectAction.getId(), new GqlvAction(this, objectAction, context)); + GqlvAction gqlvAction = new GqlvAction(this, objectAction, context); + addField(gqlvAction.getField()); + actions.put(objectAction.getId(), gqlvAction); }); } @@ -154,20 +157,24 @@ public class GqlvDomainObject } private void addProperty(final OneToOneAssociation otoa) { - properties.put(otoa.getId(), new GqlvProperty(this, otoa, context)); + GqlvProperty gqlvProperty = new GqlvProperty(this, otoa, context); + addField(gqlvProperty.getField()); + properties.put(otoa.getId(), gqlvProperty); } private void addCollection(OneToManyAssociation otom) { GqlvCollection collection = new GqlvCollection(this, otom, context); + addField(collection.getField()); if (collection.hasFieldDefinition()) { collections.put(otom.getId(), collection); } } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java index f7ffc3c04d..f29919d5e8 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java @@ -51,7 +51,7 @@ public class GqlvDomainService implements GqlvAction.Holder { private final GraphQLObjectType.Builder gqlObjectTypeBuilder; - @Getter private GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; String getLogicalTypeName() { @@ -91,7 +91,12 @@ public class GqlvDomainService implements GqlvAction.Holder { if (hasActions()) { gqlObjectType = gqlObjectTypeBuilder.build(); - addFieldFor(holder); + this.field = newFieldDefinition() + .name(TypeNames.objectTypeNameFor(this.objectSpecification)) + .type(gqlObjectType) + .build(); + } else { + this.field = null; } } @@ -110,13 +115,16 @@ public class GqlvDomainService implements GqlvAction.Holder { } private void addAction(final ObjectAction objectAction) { - actions.put(objectAction.getId(), new GqlvAction(this, objectAction, context)); + GqlvAction gqlvAction = new GqlvAction(this, objectAction, context); + addField(gqlvAction.getField()); + actions.put(objectAction.getId(), gqlvAction); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } @@ -129,13 +137,6 @@ public class GqlvDomainService implements GqlvAction.Holder { return coordinates(gqlObjectType, fieldDefinition); } - public void addFieldFor(Holder holder) { - holder.addField(this.field = newFieldDefinition() - .name(TypeNames.objectTypeNameFor(objectSpecification)) - .type(gqlObjectType) - .build()); - } - public void addDataFetchers() { context.codeRegistryBuilder.dataFetcher( holder.coordinatesFor(getField()), diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java index 805eaa79f5..588d9dd7e0 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java @@ -23,11 +23,6 @@ import graphql.schema.GraphQLFieldDefinition; public interface GqlvHolder { - /** - * Called while building out the structure - */ - GraphQLFieldDefinition addField(GraphQLFieldDefinition fieldDefinition); - /** * Called while registering the fetchers. */ diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java index 6b0aab0465..425ae899a7 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java @@ -34,6 +34,7 @@ public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMember.Ho @Getter private final T objectMember; final Context context; + @Getter @Setter(AccessLevel.PACKAGE) GraphQLFieldDefinition field; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java index 9c0be5b258..351f45ee60 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java @@ -32,6 +32,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; +import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -40,7 +41,7 @@ public class GqlvMemberDisabled<T extends ObjectMember> { private final Holder<T> holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvMemberDisabled( final Holder<T> holder, @@ -49,10 +50,10 @@ public class GqlvMemberDisabled<T extends ObjectMember> { this.holder = holder; this.context = context; - this.field = holder.addField(newFieldDefinition() + this.field = newFieldDefinition() .name("disabled") .type(this.context.typeMapper.scalarTypeFor(String.class)) - .build()); + .build(); } public void addDataFetcher() { diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java index a60a09b057..b1f95f7993 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java @@ -32,6 +32,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; +import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -40,7 +41,7 @@ public class GqlvMemberHidden<T extends ObjectMember> { private final Holder<T> holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvMemberHidden( final Holder<T> holder, @@ -49,10 +50,10 @@ public class GqlvMemberHidden<T extends ObjectMember> { this.holder = holder; this.context = context; - this.field = holder.addField(newFieldDefinition() + this.field = newFieldDefinition() .name("hidden") .type(this.context.typeMapper.scalarTypeFor(boolean.class)) - .build()); + .build(); } public void addDataFetcher() { 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 bf0c5f2e1a..fb9950c52c 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 @@ -81,8 +81,6 @@ public class GqlvMeta { .type(objectType) .build(); - holder.addField(field); - context.graphQLTypeRegistry.addTypeIfNotAlreadyPresent(objectType); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java index 950b781b52..879af596cc 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java @@ -46,6 +46,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException; import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException; +import lombok.Getter; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -56,7 +57,7 @@ public class GqlvMutationForAction { private final ObjectSpecification objectSpec; private final ObjectAction objectAction; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; private String argumentName; public GqlvMutationForAction( @@ -77,7 +78,7 @@ public class GqlvMutationForAction { .name(fieldName(objectSpec, objectAction)) .type(type); addGqlArguments(fieldBuilder); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java index 90d696c0c4..f16a8e81ac 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java @@ -38,6 +38,7 @@ import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException; import org.apache.causeway.viewer.graphql.model.exceptions.InvalidException; import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import lombok.Getter; import lombok.val; //@Log4j2 @@ -47,7 +48,7 @@ public class GqlvMutationForProperty { private final ObjectSpecification objectSpec; private final OneToOneAssociation oneToOneAssociation; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; private String argumentName; public GqlvMutationForProperty( @@ -68,7 +69,7 @@ public class GqlvMutationForProperty { .name(fieldName(objectSpec, oneToOneAssociation)) .type(type); addGqlArguments(fieldBuilder); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java index e816386fba..d3cbadea51 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java @@ -73,17 +73,37 @@ public class GqlvProperty this.gqlObjectTypeBuilder = newObject().name(TypeNames.propertyTypeNameFor(this.holder.getObjectSpecification(), oneToOneAssociation)); this.hidden = new GqlvMemberHidden<>(this, context); + addField(hidden.getField()); + this.disabled = new GqlvMemberDisabled<>(this, context); + addField(disabled.getField()); + this.get = new GqlvPropertyGet(this, context); + addField(get.getField()); + this.validate = new GqlvPropertyValidate(this, context); + addField(this.validate.getField()); + val choices = new GqlvPropertyChoices(this, context); - this.choices = choices.hasChoices() ? choices : null; + if (choices.hasChoices()) { + addField(choices.getField()); + this.choices = choices; + } else { + this.choices = null; + } + val autoComplete = new GqlvPropertyAutoComplete(this, context); - this.autoComplete = autoComplete.hasAutoComplete() ? autoComplete : null; + if (autoComplete.hasAutoComplete()) { + addField(autoComplete.getField()); + this.autoComplete = autoComplete; + } else { + this.autoComplete = null; + } val variant = context.causewayConfiguration.getViewer().getGraphql().getApiVariant(); if (variant == CausewayConfiguration.Viewer.Graphql.ApiVariant.QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT) { this.set = new GqlvPropertySet(this, context); + addField(set.getField()); } else { this.set = null; } @@ -92,12 +112,10 @@ public class GqlvProperty this.gqlObjectType = gqlObjectTypeBuilder.build(); setField( - this.holder.addField( - newFieldDefinition() - .name(oneToOneAssociation.getId()) - .type(gqlObjectTypeBuilder) - .build() - ) + newFieldDefinition() + .name(oneToOneAssociation.getId()) + .type(gqlObjectTypeBuilder) + .build() ); } @@ -127,9 +145,10 @@ public class GqlvProperty return getObjectAssociation(); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java index 3e45de4c2c..0cab63dd5f 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java @@ -36,6 +36,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; +import lombok.Getter; import lombok.val; public class GqlvPropertyAutoComplete { @@ -47,7 +48,7 @@ public class GqlvPropertyAutoComplete { /** * Populated iff there are choices for this property */ - final GraphQLFieldDefinition field; + @Getter final GraphQLFieldDefinition field; public GqlvPropertyAutoComplete( final Holder holder, @@ -65,7 +66,7 @@ public class GqlvPropertyAutoComplete { .name(SEARCH_PARAM_NAME) .type(nonNull(context.typeMapper.scalarTypeFor(String.class)))) .build(); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java index ebb5ef2a58..d4ec81e429 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java @@ -36,6 +36,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; +import lombok.Getter; import lombok.val; public class GqlvPropertyChoices { @@ -45,7 +46,7 @@ public class GqlvPropertyChoices { /** * Populated iff there are choices for this property */ - final GraphQLFieldDefinition field; + @Getter final GraphQLFieldDefinition field; public GqlvPropertyChoices( final Holder holder, @@ -60,7 +61,7 @@ public class GqlvPropertyChoices { .name("choices") .type(GraphQLList.list(context.typeMapper.outputTypeFor(elementType))); holder.addGqlArgument(otoa, fieldBuilder, TypeMapper.InputContext.CHOICES); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } else { this.field = null; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java index 6496ec1a41..fb563ef73b 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java @@ -39,36 +39,31 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; +import lombok.Getter; import lombok.val; public class GqlvPropertySet { final Holder holder; final Context context; - final GraphQLFieldDefinition field; + @Getter final GraphQLFieldDefinition field; public GqlvPropertySet( final Holder holder, final Context context) { this.holder = holder; this.context = context; - this.field = fieldDefinition(holder); - } - - GraphQLFieldDefinition fieldDefinition(final Holder holder) { - GraphQLFieldDefinition fieldDefinition = null; - GraphQLOutputType type = outputTypeFor(holder); - if (type != null) { + GraphQLOutputType graphQLOutputType = outputTypeFor(holder); + if (graphQLOutputType != null) { val fieldBuilder = newFieldDefinition() .name("set") - .type(type); + .type(graphQLOutputType); holder.addGqlArgument(holder.getOneToOneAssociation(), fieldBuilder, TypeMapper.InputContext.INVOKE); - fieldDefinition = fieldBuilder.build(); - - holder.addField(fieldDefinition); + this.field = fieldBuilder.build(); + } else { + this.field = null; } - return fieldDefinition; } GraphQLOutputType outputTypeFor(Holder holder) { diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java index 899183573c..1392f77ff8 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java @@ -32,13 +32,14 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; +import lombok.Getter; import lombok.val; public class GqlvPropertyValidate { final Holder holder; private final Context context; - final GraphQLFieldDefinition field; + @Getter final GraphQLFieldDefinition field; public GqlvPropertyValidate( final Holder holder, @@ -51,7 +52,7 @@ public class GqlvPropertyValidate { .type(context.typeMapper.scalarTypeFor(String.class)); holder.addGqlArgument(holder.getOneToOneAssociation(), fieldBuilder, TypeMapper.InputContext.VALIDATE); - this.field = holder.addField(fieldBuilder.build()); + this.field = fieldBuilder.build(); } void addDataFetcher() { diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java index a9eceac23b..a957e38e8d 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java @@ -64,7 +64,9 @@ public class GqlvScenario implements GqlvScenarioName.Holder, GqlvScenarioGiven. this.gqlObjectTypeBuilder = newObject().name("Scenario"); this.scenarioName = new GqlvScenarioName(this, context); + addField(scenarioName.getField()); this.scenarioGiven = new GqlvScenarioGiven(this, context); + addField(scenarioGiven.getField()); this.gqlObjectType = gqlObjectTypeBuilder.build(); @@ -76,14 +78,13 @@ public class GqlvScenario implements GqlvScenarioName.Holder, GqlvScenarioGiven. .type(Scalars.GraphQLString) ) .build(); - - holder.addField(field); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java index 4ebfa15b05..da0d4b5e5c 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java @@ -19,11 +19,11 @@ public class GqlvScenarioGiven implements GqlvDomainService.Holder, GqlvDomainOb private static final String OBJECT_TYPE_NAME = "Given"; - final GraphQLObjectType.Builder objectTypeBuilder; + final GraphQLObjectType.Builder gqlObjectTypeBuilder; @Getter private final GraphQLObjectType objectType; private final Holder holder; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; private final List<GqlvDomainService> domainServices = new ArrayList<>(); private final List<GqlvDomainObject> domainObjects = new ArrayList<>(); @@ -34,7 +34,7 @@ public class GqlvScenarioGiven implements GqlvDomainService.Holder, GqlvDomainOb this.holder = holder; - this.objectTypeBuilder = newObject().name(OBJECT_TYPE_NAME); + this.gqlObjectTypeBuilder = newObject().name(OBJECT_TYPE_NAME); context.objectSpecifications().forEach(objectSpec -> { switch (objectSpec.getBeanSort()) { @@ -53,7 +53,9 @@ public class GqlvScenarioGiven implements GqlvDomainService.Holder, GqlvDomainOb if (Objects.requireNonNull(objectSpec.getBeanSort()) == BeanSort.MANAGED_BEAN_CONTRIBUTING) { // @DomainService context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName()) .ifPresent(servicePojo -> { - domainServices.add(GqlvDomainService.of(objectSpec, this, servicePojo, context)); + GqlvDomainService gqlvDomainService = GqlvDomainService.of(objectSpec, this, servicePojo, context); + addField(gqlvDomainService.getField()); + domainServices.add(gqlvDomainService); }); } }); @@ -64,10 +66,9 @@ public class GqlvScenarioGiven implements GqlvDomainService.Holder, GqlvDomainOb } - objectType = objectTypeBuilder.build(); + objectType = gqlObjectTypeBuilder.build(); this.field = GraphQLFieldDefinition.newFieldDefinition().name("Given").type(objectType).build(); - this.holder.addField(field); } @@ -76,9 +77,10 @@ public class GqlvScenarioGiven implements GqlvDomainService.Holder, GqlvDomainOb return FieldCoordinates.coordinates(objectType, fieldDefinition); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - objectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java index d5164f23e2..d6ee87f989 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java @@ -5,6 +5,8 @@ import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import graphql.schema.GraphQLFieldDefinition; +import lombok.Getter; + import static graphql.schema.GraphQLObjectType.newObject; import org.apache.causeway.viewer.graphql.model.context.Context; @@ -13,7 +15,7 @@ public class GqlvScenarioName { private final Holder holder; private final Context context; - private final GraphQLFieldDefinition field; + @Getter private final GraphQLFieldDefinition field; public GqlvScenarioName( final GqlvScenarioName.Holder holder, @@ -23,7 +25,6 @@ public class GqlvScenarioName { this.context = context; this.field = GraphQLFieldDefinition.newFieldDefinition().name("Name").type(Scalars.GraphQLString).build(); - this.holder.addField(field); } public void addDataFetchers() { diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java index 4bce77cc6c..219111640a 100644 --- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java +++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java @@ -56,16 +56,21 @@ public class GqlvTopLevelMutation public void addAction(ObjectSpecification objectSpec, final ObjectAction objectAction) { - actions.add(new GqlvMutationForAction(this, objectSpec, objectAction, context)); + val gqlvMutationForAction = new GqlvMutationForAction(this, objectSpec, objectAction, context); + addField(gqlvMutationForAction.getField()); + actions.add(gqlvMutationForAction); } public void addProperty(ObjectSpecification objectSpec, final OneToOneAssociation property) { - properties.add(new GqlvMutationForProperty(this, objectSpec, property, context)); + val gqlvMutationForProperty = new GqlvMutationForProperty(this, objectSpec, property, context); + addField(gqlvMutationForProperty.getField()); + properties.add(gqlvMutationForProperty); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - gqlObjectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; } 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 7e7946cf1b..bc1e97bcfe 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 @@ -20,7 +20,7 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb private static final String OBJECT_TYPE_NAME = "Query"; - final GraphQLObjectType.Builder objectTypeBuilder; + final GraphQLObjectType.Builder gqlObjectTypeBuilder; @Getter private final GraphQLObjectType objectType; private final List<GqlvDomainService> domainServices = new ArrayList<>(); @@ -30,7 +30,7 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb public GqlvTopLevelQuery(final Context context) { - this.objectTypeBuilder = newObject().name(OBJECT_TYPE_NAME); + this.gqlObjectTypeBuilder = newObject().name(OBJECT_TYPE_NAME); context.objectSpecifications().forEach(objectSpec -> { switch (objectSpec.getBeanSort()) { @@ -51,7 +51,9 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb case MANAGED_BEAN_CONTRIBUTING: // @DomainService context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName()) .ifPresent(servicePojo -> { - domainServices.add(GqlvDomainService.of(objectSpec, this, servicePojo, context)); + GqlvDomainService gqlvDomainService = GqlvDomainService.of(objectSpec, this, servicePojo, context); + addField(gqlvDomainService.getField()); + domainServices.add(gqlvDomainService); }); break; } @@ -63,8 +65,9 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb } scenario = new GqlvScenario(this, context); + addField(scenario.getField()); - objectType = objectTypeBuilder.build(); + objectType = gqlObjectTypeBuilder.build(); } @@ -73,9 +76,10 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb return FieldCoordinates.coordinates(OBJECT_TYPE_NAME, fieldDefinition.getName()); } - @Override - public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { - objectTypeBuilder.field(field); + private GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { + if (field != null) { + gqlObjectTypeBuilder.field(field); + } return field; }
