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 51f317a3da525bbb7489aa534d087ca1b42a4c6a Author: danhaywood <[email protected]> AuthorDate: Thu Jan 25 08:46:09 2024 +0000 CAUSEWAY-3676: wip, fleshing out action parameters --- .../graphql/model/domain/GqlvActionParam.java | 23 +++---- .../model/domain/GqlvActionParamDisabled.java | 74 ++++++++++++++++++++++ ...der.java => GqlvActionParamDisabledHolder.java} | 8 ++- .../model/domain/GqlvActionParamHolder.java | 3 + .../graphql/model/domain/GqlvActionParams.java | 21 +++--- 5 files changed, 109 insertions(+), 20 deletions(-) diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java index 9e9f8fb2f3..b914a2e863 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java @@ -40,9 +40,9 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @Log4j2 -public class GqlvActionParam { +public class GqlvActionParam implements GqlvActionParamDisabledHolder { - private final GqlvActionHolder holder; + @Getter private final GqlvActionParamHolder holder; @Getter private final ObjectActionParameter objectActionParameter; private final GraphQLCodeRegistry.Builder codeRegistryBuilder; @@ -50,10 +50,12 @@ public class GqlvActionParam { private final GraphQLObjectType gqlObjectType; private final BookmarkService bookmarkService; - @Setter(AccessLevel.PACKAGE) private GraphQLFieldDefinition field; + private final GqlvActionParamDisabled disabled; + + private final GraphQLFieldDefinition field; public GqlvActionParam( - final GqlvActionHolder holder, + final GqlvActionParamHolder holder, final ObjectActionParameter objectActionParameter, final GraphQLCodeRegistry.Builder codeRegistryBuilder, final BookmarkService bookmarkService @@ -61,19 +63,18 @@ public class GqlvActionParam { this.holder = holder; this.objectActionParameter = objectActionParameter; this.codeRegistryBuilder = codeRegistryBuilder; - this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamTypeNameFor(holder.getObjectSpecification(), objectActionParameter)); + this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamTypeNameFor(holder.getHolder().getHolder().getObjectSpecification(), objectActionParameter)); this.bookmarkService = bookmarkService; + this.disabled = new GqlvActionParamDisabled(this, codeRegistryBuilder ); + + // TODO: add disabled etc this.gqlObjectType = gqlObjectTypeBuilder.build(); - val field = newFieldDefinition() + this.field = holder.addField(newFieldDefinition() .name(objectActionParameter.getId()) .type(gqlObjectTypeBuilder) - .build(); - - holder.addField(field); - - setField(field); + .build()); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java new file mode 100644 index 0000000000..79f3d88fba --- /dev/null +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.causeway.viewer.graphql.model.domain; + +import org.apache.causeway.applib.services.bookmark.BookmarkService; +import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; +import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.model.util.TypeNames; + +import lombok.Getter; +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 GqlvActionParamDisabled { + + private final GqlvActionParamDisabledHolder holder; + private final GraphQLCodeRegistry.Builder codeRegistryBuilder; + + private final GraphQLFieldDefinition field; + + public GqlvActionParamDisabled( + final GqlvActionParamDisabledHolder holder, + final GraphQLCodeRegistry.Builder codeRegistryBuilder + ) { + this.holder = holder; + this.codeRegistryBuilder = codeRegistryBuilder; + + + this.field = holder.addField(newFieldDefinition() + .name("disabled") + .type(TypeMapper.scalarTypeFor(String.class)) + .build()); + } + + public void addDataFetcher() { + codeRegistryBuilder.dataFetcher( + holder.coordinatesFor(field), + this::disabled + ); + } + + private String disabled( + final DataFetchingEnvironment dataFetchingEnvironment) { + //TODO + return null; + } +} diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabledHolder.java similarity index 78% copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabledHolder.java index 71d1426dd6..6feb0bb344 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabledHolder.java @@ -18,5 +18,11 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -public interface GqlvActionParamHolder extends GqlvHolder { +import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; + +public interface GqlvActionParamDisabledHolder extends GqlvHolder { + + GqlvActionParamHolder getHolder(); + + ObjectActionParameter getObjectActionParameter(); } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java index 71d1426dd6..3a70f186fc 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHolder.java @@ -19,4 +19,7 @@ package org.apache.causeway.viewer.graphql.model.domain; public interface GqlvActionParamHolder extends GqlvHolder { + + GqlvActionParamsHolder getHolder(); + } diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java index d41434344d..2138316a91 100644 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java +++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java @@ -43,9 +43,9 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; @Log4j2 -public class GqlvActionParams { +public class GqlvActionParams implements GqlvActionParamHolder { - private final GqlvActionParamsHolder holder; + @Getter private final GqlvActionParamsHolder holder; private final GraphQLCodeRegistry.Builder codeRegistryBuilder; private final GraphQLObjectType.Builder gqlObjectTypeBuilder; @@ -69,12 +69,16 @@ public class GqlvActionParams { this.gqlObjectTypeBuilder = newObject().name(TypeNames.actionParamsTypeNameFor(holder.getHolder().getObjectSpecification(), holder.getObjectAction())); this.bookmarkService = bookmarkService; + holder.getObjectAction().getParameters().forEach(this::addParam); + this.gqlObjectType = gqlObjectTypeBuilder.build(); - this.field = hasParams() ? holder.addField(newFieldDefinition() - .name("params") - .type(gqlObjectTypeBuilder) - .build()) : null; + this.field = hasParams() ? + holder.addField(newFieldDefinition() + .name("params") + .type(gqlObjectTypeBuilder) + .build()) + : null; } public boolean hasParams() { @@ -82,11 +86,11 @@ public class GqlvActionParams { } void addParam(ObjectActionParameter objectActionParameter) { - // TODO + new GqlvActionParam(this, objectActionParameter, codeRegistryBuilder, bookmarkService); } - // @Override + @Override public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) { gqlObjectTypeBuilder.field(field); return field; @@ -97,6 +101,7 @@ public class GqlvActionParams { holder.coordinatesFor(field), new Fetcher()); + // TODO } private class Fetcher implements DataFetcher<Object> {
