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 bddd98a8810e6a3802f94022f676abc093c6aa3b Author: danhaywood <[email protected]> AuthorDate: Mon Feb 12 18:39:12 2024 +0000 CAUSEWAY-3676: wip - now generates schema again --- .../viewer/graphql/model/domain/GqlvAbstract.java | 10 ++--- .../graphql/model/domain/GqlvAbstractCustom.java | 18 +-------- .../viewer/graphql/model/domain/GqlvAction.java | 11 +++--- .../graphql/model/domain/GqlvActionParam.java | 40 ++++++------------- .../model/domain/GqlvActionParamAutoComplete.java | 16 ++------ .../model/domain/GqlvActionParamChoices.java | 15 ++----- .../model/domain/GqlvActionParamDefault.java | 16 ++------ .../model/domain/GqlvActionParamDisabled.java | 6 +-- .../model/domain/GqlvActionParamHidden.java | 6 +-- .../graphql/model/domain/GqlvActionParams.java | 4 +- .../graphql/model/domain/GqlvAssociation.java | 14 +------ .../graphql/model/domain/GqlvCollection.java | 12 +++--- .../graphql/model/domain/GqlvDomainObject.java | 14 +++---- .../graphql/model/domain/GqlvDomainService.java | 36 +++-------------- .../viewer/graphql/model/domain/GqlvMember.java | 11 ------ .../viewer/graphql/model/domain/GqlvMeta.java | 6 +-- .../viewer/graphql/model/domain/GqlvProperty.java | 16 ++++---- .../viewer/graphql/model/domain/GqlvScenario.java | 10 +---- .../graphql/model/domain/GqlvScenarioGiven.java | 10 +---- .../graphql/model/toplevel/GqlvTopLevelQuery.java | 8 ++-- viewers/graphql/test/src/test/resources/schema.gql | 46 ---------------------- 21 files changed, 72 insertions(+), 253 deletions(-) diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java index d45584019e..fc68e0857a 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java @@ -18,16 +18,12 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLObjectType; -import graphql.schema.GraphQLOutputType; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import org.apache.causeway.viewer.graphql.model.context.Context; -import lombok.AccessLevel; import lombok.Getter; public abstract class GqlvAbstract { @@ -41,9 +37,13 @@ public abstract class GqlvAbstract { this.context = context; } - protected final GraphQLFieldDefinition setField(GraphQLFieldDefinition field) { + protected final GraphQLFieldDefinition setField(final GraphQLFieldDefinition field) { this.field = field; return field; } + public boolean isFieldDefined() { + return getField() != null; + } + } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java index eef7fb1b9a..aadcb9b39f 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java @@ -27,8 +27,6 @@ import static graphql.schema.GraphQLObjectType.newObject; import org.apache.causeway.viewer.graphql.model.context.Context; -import graphql.schema.GraphQLOutputType; - import lombok.AccessLevel; import lombok.Getter; import lombok.val; @@ -40,9 +38,6 @@ public abstract class GqlvAbstractCustom extends GqlvAbstract implements GqlvHol @Getter(AccessLevel.PROTECTED) private GraphQLObjectType gqlObjectType; - @Getter - protected GraphQLFieldDefinition field; - protected GqlvAbstractCustom( final GraphQLObjectType.Builder gqlObjectTypeBuilder, final Context context) { @@ -51,18 +46,7 @@ public abstract class GqlvAbstractCustom extends GqlvAbstract implements GqlvHol this.gqlObjectTypeBuilder = gqlObjectTypeBuilder; } - protected final GraphQLFieldDefinition field(GraphQLFieldDefinition field) { - if (this.gqlObjectType != null) { - throw new IllegalStateException("GqlObjectType has already been created"); - } - - if (field != null) { - gqlObjectTypeBuilder.field(field); - } - return field; - } - - protected final GraphQLFieldDefinition addField(GraphQLFieldDefinition childField) { + protected final GraphQLFieldDefinition addChildField(GraphQLFieldDefinition childField) { if (this.gqlObjectType != null) { throw new IllegalStateException("GqlObjectType has already been created"); } 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 bf897074f7..b78cd294a0 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 @@ -24,7 +24,6 @@ import java.util.Optional; import java.util.stream.Collectors; import graphql.schema.DataFetchingEnvironment; -import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLArgument; import graphql.schema.GraphQLFieldDefinition; @@ -77,20 +76,20 @@ public class GqlvAction super(holder, objectAction, newObject().name(TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction)), context); this.hidden = new GqlvMemberHidden<>(this, context); - addField(hidden.getField()); + addChildField(hidden.getField()); this.disabled = new GqlvMemberDisabled<>(this, context); - addField(disabled.getField()); + addChildField(disabled.getField()); this.validate = new GqlvActionValidity(this, context); - addField(validate.getField()); + addChildField(validate.getField()); val variant = context.causewayConfiguration.getViewer().getGraphql().getApiVariant(); 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); + addChildField(invokeField); } } else { this.invoke = null; @@ -98,7 +97,7 @@ public class GqlvAction val params = new GqlvActionParams(this, context); if (params.hasParams()) { this.params = params; - addField(params.getField()); + addChildField(params.getField()); } else { this.params = 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 066f373ade..f13361e2ed 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 @@ -19,9 +19,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import graphql.schema.DataFetchingEnvironment; -import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLObjectType; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @@ -56,8 +54,6 @@ public class GqlvActionParam @Getter private final ObjectActionParameter objectActionParameter; @Getter private final int paramNum; - private final GraphQLObjectType gqlObjectType; - private final GqlvActionParamHidden hidden; private final GqlvActionParamDisabled disabled; /** @@ -74,8 +70,6 @@ public class GqlvActionParam private final GqlvActionParamDefault default_; private final GqlvActionParamValidate validate; - @Getter private final GraphQLFieldDefinition field; - public GqlvActionParam( final Holder holder, final ObjectActionParameter objectActionParameter, @@ -87,43 +81,38 @@ public class GqlvActionParam this.paramNum = paramNum; this.hidden = new GqlvActionParamHidden(this, context); - addField(hidden.getField()); + addChildField(hidden.getField()); this.disabled = new GqlvActionParamDisabled(this, context); - addField(disabled.getField()); + addChildField(disabled.getField()); val choices = new GqlvActionParamChoices(this, context); - addField(choices.getField()); - if (choices.hasChoices()) { + addChildField(choices.getField()); + if (choices.isFieldDefined()) { this.choices = choices; } else { this.choices = null; } val autoComplete = new GqlvActionParamAutoComplete(this, context); - addField(autoComplete.getField()); - if (autoComplete.hasAutoComplete()) { + addChildField(autoComplete.getField()); + if (autoComplete.isFieldDefined()) { this.autoComplete = autoComplete; } else { this.autoComplete = null; } val default_ = new GqlvActionParamDefault(this, context); - addField(default_.getField()); - if (default_.hasDefault()) { + addChildField(default_.getField()); + if (default_.isFieldDefined()) { this.default_ = default_; } else { this.default_ = null; } this.validate = new GqlvActionParamValidate(this, context); - addField(validate.getField()); + addChildField(validate.getField()); - this.gqlObjectType = gqlObjectTypeBuilder.build(); - - this.field = newFieldDefinition() - .name(objectActionParameter.getId()) - .type(gqlObjectTypeBuilder) - .build(); + buildObjectTypeAndSetFieldName(objectActionParameter.getId()); } @Override @@ -143,7 +132,7 @@ public class GqlvActionParam public void addDataFetcher() { context.codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(field), + holder.coordinatesFor(getField()), new BookmarkedPojoFetcher(context.bookmarkService)); hidden.addDataFetcher(); @@ -161,11 +150,6 @@ public class GqlvActionParam } - @Override - public FieldCoordinates coordinatesFor(GraphQLFieldDefinition fieldDefinition) { - return FieldCoordinates.coordinates(gqlObjectType, fieldDefinition); - } - @Override public void addGqlArguments(ObjectAction objectAction, GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext inputContext, int paramNum) { holder.addGqlArguments(objectAction, fieldBuilder, inputContext, paramNum); @@ -178,7 +162,7 @@ public class GqlvActionParam @Override public void addGqlArgument(ObjectAction objectAction, GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext inputContext, int paramNum) { - + // TODO: what lives here? } 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 01fb258175..72e224fff6 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,7 +45,6 @@ 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; @@ -56,11 +55,6 @@ package org.apache.causeway.viewer.graphql.model.domain; private final Holder holder; - /** - * Populated iff there is an autocomplete for this parameter. - */ - @Getter private final GraphQLFieldDefinition field; - public GqlvActionParamAutoComplete( final Holder holder, final Context context) { @@ -78,19 +72,15 @@ package org.apache.causeway.viewer.graphql.model.domain; .name(SEARCH_PARAM_NAME) .type(nonNull(context.typeMapper.scalarTypeFor(String.class)))) .build(); - this.field = fieldBuilder.build(); + setField(fieldBuilder.build()); } else { - this.field = null; + setField(null); } } - boolean hasAutoComplete() { - return field != null; - } - public void addDataFetcher() { context.codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(field), + holder.coordinatesFor(getField()), this::choices ); } 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 5431091a4b..1ced208c2e 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 @@ -52,11 +52,6 @@ package org.apache.causeway.viewer.graphql.model.domain; private final Holder holder; - /** - * Populated iff there are choices for this parameter. - */ - @Getter private final GraphQLFieldDefinition field; - public GqlvActionParamChoices( final Holder holder, final Context context) { @@ -70,19 +65,15 @@ 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 = fieldBuilder.build(); + setField(fieldBuilder.build()); } else { - this.field = null; + setField(null); } } - boolean hasChoices() { - return field != null; - } - public void addDataFetcher() { context.codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(field), + holder.coordinatesFor(getField()), this::choices ); } 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 4f70a3d0c8..a3033bf8e2 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,7 +39,6 @@ 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; @@ -48,11 +47,6 @@ package org.apache.causeway.viewer.graphql.model.domain; private final Holder holder; - /** - * Populated iff there are choices for this parameter. - */ - @Getter private final GraphQLFieldDefinition field; - public GqlvActionParamDefault( final Holder holder, final Context context) { @@ -67,19 +61,15 @@ 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 = fieldBuilder.build(); + setField(fieldBuilder.build()); } else { - this.field = null; + setField(null); } } - boolean hasDefault() { - return field != null; - } - public void addDataFetcher() { context.codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(field), + holder.coordinatesFor(getField()), this::default_ ); } 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 fbf40b3bdf..f2cbfbd73b 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 @@ -45,8 +45,6 @@ public class GqlvActionParamDisabled extends GqlvAbstract { private final Holder holder; - @Getter private final GraphQLFieldDefinition field; - public GqlvActionParamDisabled( final Holder holder, final Context context) { @@ -57,13 +55,13 @@ public class GqlvActionParamDisabled extends GqlvAbstract { .name("disabled") .type(context.typeMapper.scalarTypeFor(String.class)); holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DISABLE, holder.getParamNum()+1); - this.field = fieldBuilder.build(); + setField(fieldBuilder.build()); } public void addDataFetcher() { context.codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(field), + holder.coordinatesFor(getField()), this::disabled ); } 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 ede4dac1cb..472246a0ba 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 @@ -44,8 +44,6 @@ public class GqlvActionParamHidden extends GqlvAbstract { private final Holder holder; - @Getter private final GraphQLFieldDefinition field; - public GqlvActionParamHidden( final Holder holder, final Context context) { @@ -56,13 +54,13 @@ public class GqlvActionParamHidden extends GqlvAbstract { .name("hidden") .type(context.typeMapper.scalarTypeFor(boolean.class)); holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, TypeMapper.InputContext.DISABLE, holder.getParamNum()); - this.field = fieldBuilder.build(); + setField(fieldBuilder.build()); } public void addDataFetcher() { context.codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(field), + holder.coordinatesFor(getField()), this::hidden ); } 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 71938eacec..1ae8ed6f8d 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 @@ -89,14 +89,14 @@ public class GqlvActionParams void addParam(ObjectActionParameter objectActionParameter, int paramNum) { GqlvActionParam gqlvActionParam = new GqlvActionParam(this, objectActionParameter, context, paramNum); - addField(gqlvActionParam.getField()); + addChildField(gqlvActionParam.getField()); params.put(objectActionParameter.getId(), gqlvActionParam); } void addDataFetcher() { context.codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(field), + holder.coordinatesFor(getField()), new BookmarkedPojoFetcher(context.bookmarkService)); params.forEach((id, param) -> param.addDataFetcher()); diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java index fc85648db7..f867a633d7 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java @@ -31,21 +31,9 @@ public abstract class GqlvAssociation<T extends ObjectAssociation, H extends Gql final T objectAssociation, final GraphQLObjectType.Builder gqlObjectTypeBuilder, final Context context) { - this(holder, objectAssociation, gqlObjectTypeBuilder, null, context); + super(holder, objectAssociation, gqlObjectTypeBuilder, context); } - public GqlvAssociation( - final H holder, - final T objectAssociation, - final GraphQLObjectType.Builder gqlObjectTypeBuilder, - final GraphQLFieldDefinition fieldDefinition, - final Context context) { - super(holder, objectAssociation, gqlObjectTypeBuilder, fieldDefinition, context); - } - - public boolean hasFieldDefinition() { - return getField() != null; - } /** * @see #getObjectMember() 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 5d8c1e8096..a3071660c8 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 @@ -18,10 +18,6 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -import graphql.schema.FieldCoordinates; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLObjectType; - import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @@ -47,11 +43,13 @@ public class GqlvCollection super(holder, oneToManyAssociation, newObject().name(TypeNames.collectionTypeNameFor(holder.getObjectSpecification(), oneToManyAssociation)), context); this.hidden = new GqlvMemberHidden<>(this, context); - addField(hidden.getField()); + addChildField(hidden.getField()); + this.disabled = new GqlvMemberDisabled<>(this, context); - addField(disabled.getField()); + addChildField(disabled.getField()); + this.get = new GqlvCollectionGet(this, context); - addField(get.getField()); + addChildField(get.getField()); buildObjectTypeAndSetFieldName(oneToManyAssociation.getId()); } 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 6aa6c8e2c6..51ad86ed82 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 @@ -18,18 +18,15 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -import java.util.LinkedHashMap; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import graphql.Scalars; import graphql.schema.DataFetcher; -import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLArgument; import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLInputObjectType; -import graphql.schema.GraphQLObjectType; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLInputObjectField.newInputObjectField; @@ -43,7 +40,6 @@ import org.apache.causeway.core.metamodel.spec.feature.MixedIn; import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.causeway.viewer.graphql.model.context.Context; -import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry; import lombok.Getter; import lombok.val; @@ -81,7 +77,7 @@ public class GqlvDomainObject this.objectSpecification = objectSpecification; this.meta = new GqlvMeta(this, context); - addField(meta.getField()); + addChildField(meta.getField()); GraphQLInputObjectType.Builder inputTypeBuilder = newInputObject().name(TypeNames.inputTypeNameFor(objectSpecification)); inputTypeBuilder @@ -130,7 +126,7 @@ public class GqlvDomainObject objectSpecification.streamActions(context.getActionScope(), MixedIn.INCLUDED) .forEach(objectAction -> { GqlvAction gqlvAction = new GqlvAction(this, objectAction, context); - addField(gqlvAction.getField()); + addChildField(gqlvAction.getField()); actions.put(objectAction.getId(), gqlvAction); }); } @@ -144,14 +140,14 @@ public class GqlvDomainObject private void addProperty(final OneToOneAssociation otoa) { GqlvProperty gqlvProperty = new GqlvProperty(this, otoa, context); - addField(gqlvProperty.getField()); + addChildField(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()) { + addChildField(collection.getField()); + if (collection.isFieldDefined()) { collections.put(otom.getId(), collection); } } 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 3ac6027136..ff739163ad 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 @@ -42,17 +42,13 @@ import lombok.val; /** * Exposes a domain service (view model or entity) via the GQL viewer. */ -public class GqlvDomainService implements GqlvAction.Holder { +public class GqlvDomainService + extends GqlvAbstractCustom + implements GqlvAction.Holder { private final Holder holder; @Getter private final ObjectSpecification objectSpecification; @Getter private final Object servicePojo; - private final Context context; - - private final GraphQLObjectType.Builder gqlObjectTypeBuilder; - - @Getter private final GraphQLFieldDefinition field; - String getLogicalTypeName() { return objectSpecification.getLogicalTypeName(); @@ -60,32 +56,19 @@ public class GqlvDomainService implements GqlvAction.Holder { private final Map<String, GqlvAction> actions = new LinkedHashMap<>(); - /** - * Will be <code>null</code> if there are no actions. - */ - private GraphQLObjectType gqlObjectType; - public GqlvDomainService( final GqlvDomainService.Holder holder, final ObjectSpecification objectSpecification, final Object servicePojo, final Context context) { + super(newObject().name(TypeNames.objectTypeNameFor(objectSpecification)), context); this.holder = holder; this.objectSpecification = objectSpecification; this.servicePojo = servicePojo; - this.context = context; - - this.gqlObjectTypeBuilder = newObject().name(TypeNames.objectTypeNameFor(objectSpecification)); addActions(); if (hasActions()) { - gqlObjectType = gqlObjectTypeBuilder.build(); - this.field = newFieldDefinition() - .name(TypeNames.objectTypeNameFor(this.objectSpecification)) - .type(gqlObjectType) - .build(); - } else { - this.field = null; + buildObjectTypeAndSetFieldName(TypeNames.objectTypeNameFor(this.objectSpecification)); } } @@ -117,15 +100,6 @@ public class GqlvDomainService implements GqlvAction.Holder { return field; } - @Override - public FieldCoordinates coordinatesFor(GraphQLFieldDefinition fieldDefinition) { - if (gqlObjectType == null) { - throw new IllegalStateException(String.format( - "GraphQLObjectType has not yet been built for %s", getLogicalTypeName())); - } - return coordinates(gqlObjectType, fieldDefinition); - } - 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/GqlvMember.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java index ce3af7664b..94574512c2 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 @@ -39,21 +39,10 @@ public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMember.Ho final T objectMember, final GraphQLObjectType.Builder gqlObjectTypeBuilder, final Context context - ) { - this(holder, objectMember, gqlObjectTypeBuilder, null, context); - } - - public GqlvMember( - final H holder, - final T objectMember, - final GraphQLObjectType.Builder gqlObjectTypeBuilder, - final GraphQLFieldDefinition field, - final Context context ) { super(gqlObjectTypeBuilder, context); this.holder = holder; this.objectMember = objectMember; - this.field = field; } public String getId() { 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 515f026067..e116fc3183 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 @@ -59,10 +59,10 @@ public class GqlvMeta extends GqlvAbstractCustom { this.holder = holder; - field(id); - field(logicalTypeName); + addChildField(id); + addChildField(logicalTypeName); if (this.holder.getObjectSpecification().getBeanSort() == BeanSort.ENTITY) { - field(version); + addChildField(version); } val fieldName = context.causewayConfiguration.getViewer().getGraphql().getMetaData().getFieldName(); 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 967343dece..57713a604b 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 @@ -18,10 +18,8 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLArgument; import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLObjectType; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @@ -69,20 +67,20 @@ public class GqlvProperty super(holder, oneToOneAssociation, newObject().name(TypeNames.propertyTypeNameFor(holder.getObjectSpecification(), oneToOneAssociation)), context); this.hidden = new GqlvMemberHidden<>(this, context); - addField(hidden.getField()); + addChildField(hidden.getField()); this.disabled = new GqlvMemberDisabled<>(this, context); - addField(disabled.getField()); + addChildField(disabled.getField()); this.get = new GqlvPropertyGet(this, context); - addField(get.getField()); + addChildField(get.getField()); this.validate = new GqlvPropertyValidate(this, context); - addField(this.validate.getField()); + addChildField(this.validate.getField()); val choices = new GqlvPropertyChoices(this, context); if (choices.hasChoices()) { - addField(choices.getField()); + addChildField(choices.getField()); this.choices = choices; } else { this.choices = null; @@ -90,7 +88,7 @@ public class GqlvProperty val autoComplete = new GqlvPropertyAutoComplete(this, context); if (autoComplete.hasAutoComplete()) { - addField(autoComplete.getField()); + addChildField(autoComplete.getField()); this.autoComplete = autoComplete; } else { this.autoComplete = null; @@ -99,7 +97,7 @@ public class GqlvProperty 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()); + addChildField(set.getField()); } else { this.set = null; } 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 b929fec17a..a52d1400f3 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 @@ -20,10 +20,8 @@ package org.apache.causeway.viewer.graphql.model.domain; import graphql.Scalars; import graphql.schema.DataFetcher; -import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLArgument; import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLObjectType; import static graphql.schema.FieldCoordinates.coordinates; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; @@ -31,10 +29,6 @@ import static graphql.schema.GraphQLObjectType.newObject; import org.apache.causeway.viewer.graphql.model.context.Context; -import graphql.schema.GraphQLScalarType; - -import lombok.Getter; - /** * Exposes a domain service (view model or entity) via the GQL viewer. */ @@ -58,9 +52,9 @@ public class GqlvScenario this.scenarioPojo = context.serviceRegistry.lookupService(Scenario.class).orElseThrow(); this.scenarioName = new GqlvScenarioName(this, context); - addField(scenarioName.getField()); + addChildField(scenarioName.getField()); this.scenarioGiven = new GqlvScenarioGiven(this, context); - addField(scenarioGiven.getField()); + addChildField(scenarioGiven.getField()); buildObjectType(); 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 6f24294f32..60790e4a08 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 @@ -1,11 +1,5 @@ package org.apache.causeway.viewer.graphql.model.domain; -import graphql.schema.FieldCoordinates; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLObjectType; - -import lombok.Getter; - import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -51,7 +45,7 @@ public class GqlvScenarioGiven context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName()) .ifPresent(servicePojo -> { GqlvDomainService gqlvDomainService = new GqlvDomainService(this, objectSpec, servicePojo, context); - addField(gqlvDomainService.getField()); + addChildField(gqlvDomainService.getField()); domainServices.add(gqlvDomainService); }); } @@ -59,7 +53,7 @@ public class GqlvScenarioGiven // add domain object lookup to top-level query for (GqlvDomainObject domainObject : this.domainObjects) { - addField(domainObject.getLookupField()); + addChildField(domainObject.getLookupField()); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java index c98207bff8..2cab384761 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java @@ -26,7 +26,7 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb private final List<GqlvDomainService> domainServices = new ArrayList<>(); private final List<GqlvDomainObject> domainObjects = new ArrayList<>(); - private final GqlvScenario scenario; +// private final GqlvScenario scenario; public GqlvTopLevelQuery(final Context context) { @@ -64,8 +64,8 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb addField(domainObject.getLookupField()); } - scenario = new GqlvScenario(this, context); - addField(scenario.getField()); +// scenario = new GqlvScenario(this, context); +// addField(scenario.getField()); objectType = gqlObjectTypeBuilder.build(); } @@ -95,7 +95,7 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder, GqlvDomainOb domainObjects.forEach(GqlvDomainObject::addDataFetchers); - scenario.addDataFetchers(); +// scenario.addDataFetchers(); } } diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql index c3c1d4042e..65b53a6d18 100644 --- a/viewers/graphql/test/src/test/resources/schema.gql +++ b/viewers/graphql/test/src/test/resources/schema.gql @@ -22,48 +22,7 @@ directive @specifiedBy( url: String! ) on SCALAR -type Given { - _gqlv_lookup__causeway_applib_DomainObjectList(object: causeway_applib_DomainObjectList__gqlv_input): causeway_applib_DomainObjectList - _gqlv_lookup__causeway_applib_FacetGroupNode(object: causeway_applib_FacetGroupNode__gqlv_input): causeway_applib_FacetGroupNode - _gqlv_lookup__causeway_applib_ParameterNode(object: causeway_applib_ParameterNode__gqlv_input): causeway_applib_ParameterNode - _gqlv_lookup__causeway_applib_PropertyNode(object: causeway_applib_PropertyNode__gqlv_input): causeway_applib_PropertyNode - _gqlv_lookup__causeway_applib_RoleMemento(object: causeway_applib_RoleMemento__gqlv_input): causeway_applib_RoleMemento - _gqlv_lookup__causeway_applib_TypeNode(object: causeway_applib_TypeNode__gqlv_input): causeway_applib_TypeNode - _gqlv_lookup__causeway_applib_UserMemento(object: causeway_applib_UserMemento__gqlv_input): causeway_applib_UserMemento - _gqlv_lookup__causeway_applib_node_ActionNode(object: causeway_applib_node_ActionNode__gqlv_input): causeway_applib_node_ActionNode - _gqlv_lookup__causeway_applib_node_CollectionNode(object: causeway_applib_node_CollectionNode__gqlv_input): causeway_applib_node_CollectionNode - _gqlv_lookup__causeway_applib_node_FacetAttrNode(object: causeway_applib_node_FacetAttrNode__gqlv_input): causeway_applib_node_FacetAttrNode - _gqlv_lookup__causeway_applib_node_FacetNode(object: causeway_applib_node_FacetNode__gqlv_input): causeway_applib_node_FacetNode - _gqlv_lookup__causeway_conf_ConfigurationProperty(object: causeway_conf_ConfigurationProperty__gqlv_input): causeway_conf_ConfigurationProperty - _gqlv_lookup__causeway_conf_ConfigurationViewmodel(object: causeway_conf_ConfigurationViewmodel__gqlv_input): causeway_conf_ConfigurationViewmodel - _gqlv_lookup__causeway_feat_ApplicationFeatureViewModel(object: causeway_feat_ApplicationFeatureViewModel__gqlv_input): causeway_feat_ApplicationFeatureViewModel - _gqlv_lookup__causeway_feat_ApplicationNamespace(object: causeway_feat_ApplicationNamespace__gqlv_input): causeway_feat_ApplicationNamespace - _gqlv_lookup__causeway_feat_ApplicationType(object: causeway_feat_ApplicationType__gqlv_input): causeway_feat_ApplicationType - _gqlv_lookup__causeway_feat_ApplicationTypeAction(object: causeway_feat_ApplicationTypeAction__gqlv_input): causeway_feat_ApplicationTypeAction - _gqlv_lookup__causeway_feat_ApplicationTypeCollection(object: causeway_feat_ApplicationTypeCollection__gqlv_input): causeway_feat_ApplicationTypeCollection - _gqlv_lookup__causeway_feat_ApplicationTypeMember(object: causeway_feat_ApplicationTypeMember__gqlv_input): causeway_feat_ApplicationTypeMember - _gqlv_lookup__causeway_feat_ApplicationTypeProperty(object: causeway_feat_ApplicationTypeProperty__gqlv_input): causeway_feat_ApplicationTypeProperty - _gqlv_lookup__causeway_schema_metamodel_v2_DomainClassDto(object: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input): causeway_schema_metamodel_v2_DomainClassDto - _gqlv_lookup__causeway_security_LoginRedirect(object: causeway_security_LoginRedirect__gqlv_input): causeway_security_LoginRedirect - _gqlv_lookup__causeway_testing_fixtures_FixtureResult(object: causeway_testing_fixtures_FixtureResult__gqlv_input): causeway_testing_fixtures_FixtureResult - _gqlv_lookup__java_lang_Runnable(object: java_lang_Runnable__gqlv_input): java_lang_Runnable - _gqlv_lookup__java_util_Map(object: java_util_Map__gqlv_input): java_util_Map - _gqlv_lookup__java_util_SortedMap(object: java_util_SortedMap__gqlv_input): java_util_SortedMap - _gqlv_lookup__java_util_concurrent_Callable(object: java_util_concurrent_Callable__gqlv_input): java_util_concurrent_Callable - _gqlv_lookup__java_util_function_BiFunction(object: java_util_function_BiFunction__gqlv_input): java_util_function_BiFunction - _gqlv_lookup__java_util_function_Consumer(object: java_util_function_Consumer__gqlv_input): java_util_function_Consumer - _gqlv_lookup__java_util_function_Function(object: java_util_function_Function__gqlv_input): java_util_function_Function - _gqlv_lookup__java_util_stream_Stream(object: java_util_stream_Stream__gqlv_input): java_util_stream_Stream - _gqlv_lookup__org_apache_causeway_core_metamodel_inspect_model_MMNode(object: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): org_apache_causeway_core_metamodel_inspect_model_MMNode - _gqlv_lookup__org_apache_causeway_core_metamodel_inspect_model_MemberNode(object: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): org_apache_causeway_core_metamodel_inspect_model_MemberNode - _gqlv_lookup__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript(object: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input): org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript - _gqlv_lookup__university_dept_Department(object: university_dept_Department__gqlv_input): university_dept_Department - _gqlv_lookup__university_dept_DeptHead(object: university_dept_DeptHead__gqlv_input): university_dept_DeptHead - _gqlv_lookup__university_dept_StaffMember(object: university_dept_StaffMember__gqlv_input): university_dept_StaffMember -} - type Query { - Scenario(name: String): Scenario _gqlv_lookup__causeway_applib_DomainObjectList(object: causeway_applib_DomainObjectList__gqlv_input): causeway_applib_DomainObjectList _gqlv_lookup__causeway_applib_FacetGroupNode(object: causeway_applib_FacetGroupNode__gqlv_input): causeway_applib_FacetGroupNode _gqlv_lookup__causeway_applib_ParameterNode(object: causeway_applib_ParameterNode__gqlv_input): causeway_applib_ParameterNode @@ -111,11 +70,6 @@ type Query { university_dept_Staff: university_dept_Staff } -type Scenario { - Given: Given - Name: String -} - type causeway_applib_DomainObjectList { _gqlv_meta: causeway_applib_DomainObjectList__gqlv_meta actionArguments: causeway_applib_DomainObjectList__actionArguments__gqlv_property
