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> {

Reply via email to