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";
     }

Reply via email to