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 733c97d2f5a1247c65fb8c09a238825324d38730 Author: danhaywood <[email protected]> AuthorDate: Thu Jan 25 08:30:30 2024 +0000 CAUSEWAY-3676: wip on adding params --- .../viewer/graphql/model/domain/GqlvAction.java | 16 +++- .../{GqlvAction.java => GqlvActionParam.java} | 75 ++++++++++--------- ...idateHolder.java => GqlvActionParamHolder.java} | 7 +- .../{GqlvAction.java => GqlvActionParams.java} | 86 ++++++++++++---------- ...dateHolder.java => GqlvActionParamsHolder.java} | 5 +- .../model/domain/GqlvActionValidateHolder.java | 1 - .../viewer/graphql/model/util/TypeNames.java | 9 +++ 7 files changed, 109 insertions(+), 90 deletions(-) diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java index 320051f9c3..560d207128 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java @@ -36,7 +36,8 @@ public class GqlvAction implements GqlvMemberHiddenHolder, GqlvMemberDisabledHolder, GqlvActionInvokeHolder, - GqlvActionValidateHolder { + GqlvActionValidateHolder, + GqlvActionParamsHolder { private final GraphQLObjectType.Builder gqlObjectTypeBuilder; private final GraphQLObjectType gqlObjectType; @@ -44,6 +45,10 @@ public class GqlvAction private final GqlvMemberDisabled disabled; private final GqlvActionValidate validate; private final GqlvActionInvoke invoke; + /** + * Populated iif there are params for this action. + */ + private final GqlvActionParams params; private final BookmarkService bookmarkService; public GqlvAction( @@ -61,13 +66,15 @@ public class GqlvAction this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder); this.validate = new GqlvActionValidate(this, codeRegistryBuilder); this.invoke = new GqlvActionInvoke(this, codeRegistryBuilder, bookmarkService); + val params = new GqlvActionParams(this, codeRegistryBuilder, bookmarkService); + this.params = params.hasParams() ? params : null; this.gqlObjectType = gqlObjectTypeBuilder.build(); - setField(holder.addField(newFieldDefinition() + this.field = holder.addField(newFieldDefinition() .name(objectAction.getId()) .type(gqlObjectTypeBuilder) - .build())); + .build()); } @Override @@ -90,6 +97,9 @@ public class GqlvAction disabled.addDataFetcher(); validate.addDataFetcher(); invoke.addDataFetcher(); + if (params != null) { + params.addDataFetcher(); + } } private class Fetcher implements DataFetcher<Object> { diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java similarity index 64% copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java index 320051f9c3..9e9f8fb2f3 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java @@ -20,62 +20,64 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.applib.services.bookmark.BookmarkService; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; +import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; import org.apache.causeway.viewer.graphql.model.util.TypeNames; -import graphql.schema.*; - -import lombok.extern.log4j.Log4j2; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; import lombok.val; +import lombok.extern.log4j.Log4j2; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.FieldCoordinates; +import graphql.schema.GraphQLCodeRegistry; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLObjectType; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @Log4j2 -public class GqlvAction - extends GqlvMember<ObjectAction, GqlvActionHolder> - implements GqlvMemberHiddenHolder, - GqlvMemberDisabledHolder, - GqlvActionInvokeHolder, - GqlvActionValidateHolder { +public class GqlvActionParam { + + private final GqlvActionHolder holder; + @Getter private final ObjectActionParameter objectActionParameter; + private final GraphQLCodeRegistry.Builder codeRegistryBuilder; private final GraphQLObjectType.Builder gqlObjectTypeBuilder; private final GraphQLObjectType gqlObjectType; - private final GqlvMemberHidden hidden; - private final GqlvMemberDisabled disabled; - private final GqlvActionValidate validate; - private final GqlvActionInvoke invoke; private final BookmarkService bookmarkService; - public GqlvAction( + @Setter(AccessLevel.PACKAGE) private GraphQLFieldDefinition field; + + public GqlvActionParam( final GqlvActionHolder holder, - final ObjectAction objectAction, + final ObjectActionParameter objectActionParameter, final GraphQLCodeRegistry.Builder codeRegistryBuilder, final BookmarkService bookmarkService ) { - super(holder, objectAction, codeRegistryBuilder); - - this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction)); + this.holder = holder; + this.objectActionParameter = objectActionParameter; + this.codeRegistryBuilder = codeRegistryBuilder; + this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamTypeNameFor(holder.getObjectSpecification(), objectActionParameter)); this.bookmarkService = bookmarkService; - this.hidden = new GqlvMemberHidden(this, codeRegistryBuilder); - this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder); - this.validate = new GqlvActionValidate(this, codeRegistryBuilder); - this.invoke = new GqlvActionInvoke(this, codeRegistryBuilder, bookmarkService); - this.gqlObjectType = gqlObjectTypeBuilder.build(); - setField(holder.addField(newFieldDefinition() - .name(objectAction.getId()) - .type(gqlObjectTypeBuilder) - .build())); - } + val field = newFieldDefinition() + .name(objectActionParameter.getId()) + .type(gqlObjectTypeBuilder) + .build(); - @Override - public ObjectAction getObjectAction() { - return getObjectMember(); + holder.addField(field); + + setField(field); } - @Override + + // @Override public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { gqlObjectTypeBuilder.field(field); return field; @@ -83,13 +85,10 @@ public class GqlvAction public void addDataFetcher() { codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(getField()), + holder.coordinatesFor(field), new Fetcher()); - hidden.addDataFetcher(); - disabled.addDataFetcher(); - validate.addDataFetcher(); - invoke.addDataFetcher(); + // TODO } private class Fetcher implements DataFetcher<Object> { @@ -105,7 +104,7 @@ public class GqlvAction } - @Override + // @Override public FieldCoordinates coordinatesFor(GraphQLFieldDefinition fieldDefinition) { return FieldCoordinates.coordinates(gqlObjectType, fieldDefinition); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java similarity index 83% copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java index 0db40ab9e8..71d1426dd6 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java @@ -18,10 +18,5 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; - -public interface GqlvActionValidateHolder extends GqlvHolder { - - - ObjectAction getObjectAction(); +public interface GqlvActionParamHolder extends GqlvHolder { } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java similarity index 64% copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java index 320051f9c3..d41434344d 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java @@ -19,77 +19,84 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.applib.services.bookmark.BookmarkService; -import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; +import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; import org.apache.causeway.viewer.graphql.model.util.TypeNames; -import graphql.schema.*; - -import lombok.extern.log4j.Log4j2; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; import lombok.val; +import lombok.extern.log4j.Log4j2; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.FieldCoordinates; +import graphql.schema.GraphQLCodeRegistry; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLObjectType; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @Log4j2 -public class GqlvAction - extends GqlvMember<ObjectAction, GqlvActionHolder> - implements GqlvMemberHiddenHolder, - GqlvMemberDisabledHolder, - GqlvActionInvokeHolder, - GqlvActionValidateHolder { +public class GqlvActionParams { + + private final GqlvActionParamsHolder holder; + private final GraphQLCodeRegistry.Builder codeRegistryBuilder; private final GraphQLObjectType.Builder gqlObjectTypeBuilder; private final GraphQLObjectType gqlObjectType; - private final GqlvMemberHidden hidden; - private final GqlvMemberDisabled disabled; - private final GqlvActionValidate validate; - private final GqlvActionInvoke invoke; private final BookmarkService bookmarkService; - public GqlvAction( - final GqlvActionHolder holder, - final ObjectAction objectAction, + /** + * Populated iff {@link #hasParams()} + */ + private final GraphQLFieldDefinition field; + + private final Map<String, ObjectActionParameter> params = new LinkedHashMap<>(); + + public GqlvActionParams( + final GqlvActionParamsHolder holder, final GraphQLCodeRegistry.Builder codeRegistryBuilder, final BookmarkService bookmarkService ) { - super(holder, objectAction, codeRegistryBuilder); - - this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction)); + this.holder = holder; + this.codeRegistryBuilder = codeRegistryBuilder; + this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamsTypeNameFor(holder.getHolder().getObjectSpecification(), holder.getObjectAction())); this.bookmarkService = bookmarkService; - this.hidden = new GqlvMemberHidden(this, codeRegistryBuilder); - this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder); - this.validate = new GqlvActionValidate(this, codeRegistryBuilder); - this.invoke = new GqlvActionInvoke(this, codeRegistryBuilder, bookmarkService); - this.gqlObjectType = gqlObjectTypeBuilder.build(); - setField(holder.addField(newFieldDefinition() - .name(objectAction.getId()) + this.field = hasParams() ? holder.addField(newFieldDefinition() + .name("params") .type(gqlObjectTypeBuilder) - .build())); + .build()) : null; } - @Override - public ObjectAction getObjectAction() { - return getObjectMember(); + public boolean hasParams() { + return !params.isEmpty(); } - @Override + void addParam(ObjectActionParameter objectActionParameter) { + // TODO + } + + + // @Override public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { gqlObjectTypeBuilder.field(field); return field; } - public void addDataFetcher() { + void addDataFetcher() { codeRegistryBuilder.dataFetcher( - holder.coordinatesFor(getField()), + holder.coordinatesFor(field), new Fetcher()); - hidden.addDataFetcher(); - disabled.addDataFetcher(); - validate.addDataFetcher(); - invoke.addDataFetcher(); } private class Fetcher implements DataFetcher<Object> { @@ -104,8 +111,7 @@ public class GqlvAction } } - - @Override + //@Override public FieldCoordinates coordinatesFor(GraphQLFieldDefinition fieldDefinition) { return FieldCoordinates.coordinates(gqlObjectType, fieldDefinition); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsHolder.java similarity index 91% copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsHolder.java index 0db40ab9e8..5278c17d5c 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsHolder.java @@ -20,8 +20,9 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; -public interface GqlvActionValidateHolder extends GqlvHolder { - +public interface GqlvActionParamsHolder extends GqlvHolder { ObjectAction getObjectAction(); + + GqlvActionHolder getHolder(); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java index 0db40ab9e8..9aeb23920a 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidateHolder.java @@ -22,6 +22,5 @@ import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; public interface GqlvActionValidateHolder extends GqlvHolder { - ObjectAction getObjectAction(); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java index 62bc7e56c5..3d7e198890 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/util/TypeNames.java @@ -22,6 +22,7 @@ import lombok.experimental.UtilityClass; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; +import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; @@ -44,6 +45,14 @@ public final class TypeNames { return objectTypeNameFor(owningType) + "__" + objectAction.getId() + "__gqlv_action"; } + public static String actionParamsTypeNameFor(ObjectSpecification owningType, ObjectAction objectAction) { + return objectTypeNameFor(owningType) + "__" + objectAction.getId() + "__gqlv_action_params"; + } + + public static String actionParamTypeNameFor(ObjectSpecification owningType, ObjectActionParameter objectActionParameter) { + return objectTypeNameFor(owningType) + "__" + objectActionParameter.getAction().getId() + "__" + objectActionParameter.getId() + "__gqlv_action_parameter"; + } + public static String propertyTypeNameFor(ObjectSpecification owningType, OneToOneAssociation oneToOneAssociation) { return objectTypeNameFor(owningType) + "__" + oneToOneAssociation.getId() + "__gqlv_property"; }
