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


The following commit(s) were added to refs/heads/CAUSEWAY-3676 by this push:
     new d8fadf296d CAUSEWAY-3676: finishes extraction of TypeMapper 
responsibilities
d8fadf296d is described below

commit d8fadf296daa080b3f31b1eaabea37006e3b0dcd
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 26 15:19:18 2024 +0000

    CAUSEWAY-3676: finishes extraction of TypeMapper responsibilities
---
 .../viewer/graphql/model/domain/GqlvAction.java    | 39 ++--------------------
 .../graphql/model/domain/GqlvActionInvoke.java     |  9 ++++-
 .../graphql/model/domain/GqlvActionParam.java      | 15 +++++++++
 .../model/domain/GqlvActionParamAutoComplete.java  |  9 ++++-
 .../model/domain/GqlvActionParamChoices.java       |  8 ++++-
 .../model/domain/GqlvActionParamDefault.java       |  9 ++++-
 .../model/domain/GqlvActionParamDisabled.java      |  9 ++++-
 .../model/domain/GqlvActionParamHidden.java        |  9 ++++-
 .../model/domain/GqlvActionParamValidate.java      |  9 ++++-
 .../graphql/model/domain/GqlvActionParams.java     | 18 ++++++++++
 .../viewer/graphql/model/types/TypeMapper.java     | 37 ++++++++++++++++++++
 11 files changed, 128 insertions(+), 43 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 6a64d44d74..3cf5a7612e 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
@@ -92,7 +92,7 @@ public class GqlvAction
                 .build());
     }
 
-    static Can<ManagedObject> argumentManagedObjectsFor(
+    public Can<ManagedObject> argumentManagedObjectsFor(
             final DataFetchingEnvironment dataFetchingEnvironment,
             final ObjectAction objectAction,
             final BookmarkService bookmarkService) {
@@ -140,7 +140,7 @@ public class GqlvAction
                 });
     }
 
-    private static ManagedObject adaptValue(
+    private ManagedObject adaptValue(
             final ObjectActionParameter oap,
             final Object argumentValue) {
 
@@ -149,43 +149,10 @@ public class GqlvAction
             return ManagedObject.empty(elementType);
         }
 
-        val argPojo = adaptPojo(argumentValue, elementType);
+        val argPojo = context.typeMapper.adaptPojo(argumentValue, elementType);
         return ManagedObject.adaptParameter(oap, argPojo);
     }
 
-    private static Object adaptPojo(
-            final Object argumentValue,
-            ObjectSpecification elementType) {
-        val elementClazz = elementType.getCorrespondingClass();
-
-        if (elementClazz.isEnum()) {
-            return Enum.valueOf((Class<Enum>) elementClazz, 
argumentValue.toString());
-        }
-
-        if (elementClazz == BigInteger.class) {
-            return BigInteger.valueOf((Integer) argumentValue);
-        }
-
-        if (elementClazz == BigDecimal.class) {
-            return BigDecimal.valueOf((Double) argumentValue);
-        }
-
-        if (elementClazz == LocalDate.class) {
-            String argumentStr = (String) argumentValue;
-            return LocalDate.parse(argumentStr, 
DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        }
-
-        if (elementClazz == org.joda.time.LocalDate.class) {
-            String argumentStr = (String) argumentValue;
-            return org.joda.time.LocalDate.parse(argumentStr, 
org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd"));
-        }
-
-        if (elementClazz == float.class || elementClazz == Float.class) {
-            return ((Double) argumentValue).floatValue();
-        }
-
-        return argumentValue;
-    }
 
     private static Optional<Object> asPojo(
             final ObjectSpecification elementType,
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
index d0ca5e0890..e1356732a0 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
@@ -19,6 +19,8 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 
 import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
@@ -151,7 +153,7 @@ public class GqlvActionInvoke {
         }
 
         val head = objectAction.interactionHead(managedObject);
-        val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+        val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
         val validityConsent = objectAction.isArgumentSetValid(head, 
argumentManagedObjects, InteractionInitiatedBy.USER);
         if (validityConsent.isVetoed()) {
@@ -172,5 +174,10 @@ public class GqlvActionInvoke {
                 final GraphQLFieldDefinition.Builder fieldBuilder,
                 final TypeMapper.InputContext inputContext,
                 final int parameterCount);
+
+        Can<ManagedObject> argumentManagedObjectsFor(
+                DataFetchingEnvironment dataFetchingEnvironment,
+                ObjectAction objectAction,
+                BookmarkService bookmarkService);
     }
 }
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 4a10ac9750..c05f8b891a 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
@@ -18,6 +18,9 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
 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;
@@ -27,6 +30,8 @@ import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider
 import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
+import graphql.schema.DataFetchingEnvironment;
+
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 
@@ -154,6 +159,11 @@ public class GqlvActionParam
         holder.addGqlArguments(objectAction, fieldBuilder, inputContext, 
paramNum);
     }
 
+    @Override
+    public Can<ManagedObject> 
argumentManagedObjectsFor(DataFetchingEnvironment dataFetchingEnvironment, 
ObjectAction objectAction, BookmarkService bookmarkService) {
+        return holder.argumentManagedObjectsFor(dataFetchingEnvironment, 
objectAction, bookmarkService);
+    }
+
     @Override
     public void addGqlArgument(ObjectAction objectAction, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext, int paramNum) {
 
@@ -170,5 +180,10 @@ public class GqlvActionParam
                 GraphQLFieldDefinition.Builder fieldBuilder,
                 TypeMapper.InputContext inputContext,
                 int paramNum);
+
+        Can<ManagedObject> argumentManagedObjectsFor(
+                DataFetchingEnvironment dataFetchingEnvironment,
+                ObjectAction objectAction,
+                BookmarkService bookmarkService);
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
index ed3f822c8b..1279b1bf90 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
@@ -23,6 +23,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
  import java.util.stream.Collectors;
 
  import org.apache.causeway.applib.annotation.Where;
+ import org.apache.causeway.applib.services.bookmark.BookmarkService;
+ import org.apache.causeway.commons.collections.Can;
  import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
  import 
org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
@@ -107,7 +109,7 @@ package org.apache.causeway.viewer.graphql.model.domain;
          val managedObject = ManagedObject.adaptSingular(objectSpecification, 
sourcePojo);
 
          val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
-         val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+         val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
          val managedAction = ManagedAction.of(managedObject, objectAction, 
Where.ANYWHERE);
          val pendingArgs = ParameterNegotiationModel.of(managedAction, 
argumentManagedObjects);
@@ -131,5 +133,10 @@ package org.apache.causeway.viewer.graphql.model.domain;
                  GraphQLFieldDefinition.Builder fieldBuilder,
                  TypeMapper.InputContext inputContext,
                  int paramNum);
+
+         Can<ManagedObject> argumentManagedObjectsFor(
+                 DataFetchingEnvironment dataFetchingEnvironment,
+                 ObjectAction objectAction,
+                 BookmarkService bookmarkService);
      }
  }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
index d48720d575..2fec45c1ee 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
@@ -19,6 +19,7 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
@@ -99,7 +100,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
          val managedObject = ManagedObject.adaptSingular(objectSpecification, 
sourcePojo);
 
          val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
-         val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+         val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
          val managedAction = ManagedAction.of(managedObject, objectAction, 
Where.ANYWHERE);
          val pendingArgs = ParameterNegotiationModel.of(managedAction, 
argumentManagedObjects);
@@ -122,5 +123,10 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
                  GraphQLFieldDefinition.Builder fieldBuilder,
                  TypeMapper.InputContext inputContext,
                  int paramNum);
+
+         Can<ManagedObject> argumentManagedObjectsFor(
+                 DataFetchingEnvironment dataFetchingEnvironment,
+                 ObjectAction objectAction,
+                 BookmarkService bookmarkService);
      }
  }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
index d4e48be8f4..8a7405bc1d 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
@@ -21,6 +21,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
  import java.util.Collections;
 
  import org.apache.causeway.applib.annotation.Where;
+ import org.apache.causeway.applib.services.bookmark.BookmarkService;
+ import org.apache.causeway.commons.collections.Can;
  import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
  import 
org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
  import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -94,7 +96,7 @@ package org.apache.causeway.viewer.graphql.model.domain;
          val managedObject = ManagedObject.adaptSingular(objectSpecification, 
sourcePojo);
 
          val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
-         val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+         val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
          val managedAction = ManagedAction.of(managedObject, objectAction, 
Where.ANYWHERE);
          val pendingArgs = ParameterNegotiationModel.of(managedAction, 
argumentManagedObjects);
@@ -115,5 +117,10 @@ package org.apache.causeway.viewer.graphql.model.domain;
                  GraphQLFieldDefinition.Builder fieldBuilder,
                  TypeMapper.InputContext inputContext,
                  int paramNum);
+
+         Can<ManagedObject> argumentManagedObjectsFor(
+                 DataFetchingEnvironment dataFetchingEnvironment,
+                 ObjectAction objectAction,
+                 BookmarkService bookmarkService);
      }
  }
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
index 0819256aa3..9c5bdfe88a 100644
--- 
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
@@ -18,6 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
@@ -79,7 +81,7 @@ public class GqlvActionParamDisabled {
         val actionInteractionHead = 
objectAction.interactionHead(managedObject);
 
         val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
-        val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+        val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
         val usable = objectActionParameter.isUsable(actionInteractionHead, 
argumentManagedObjects, InteractionInitiatedBy.USER);
         return usable.isVetoed() ? 
usable.getReasonAsString().orElse("Disabled") : null;
@@ -95,5 +97,10 @@ public class GqlvActionParamDisabled {
                 GraphQLFieldDefinition.Builder fieldBuilder,
                 TypeMapper.InputContext inputContext,
                 int i);
+
+        Can<ManagedObject> argumentManagedObjectsFor(
+                DataFetchingEnvironment dataFetchingEnvironment,
+                ObjectAction objectAction,
+                BookmarkService bookmarkService);
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
index c412fe2b85..345f7a4a13 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
@@ -18,6 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
@@ -81,7 +83,7 @@ public class GqlvActionParamHidden {
 
         val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
 
-        val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+        val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
         val visible = objectActionParameter.isVisible(actionInteractionHead, 
argumentManagedObjects, InteractionInitiatedBy.USER);
         return visible.isVetoed();
@@ -97,5 +99,10 @@ public class GqlvActionParamHidden {
                 GraphQLFieldDefinition.Builder fieldBuilder,
                 TypeMapper.InputContext inputContext,
                 int paramNum);
+
+        Can<ManagedObject> argumentManagedObjectsFor(
+                DataFetchingEnvironment dataFetchingEnvironment,
+                ObjectAction objectAction,
+                BookmarkService bookmarkService);
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
index 42d8537cc6..5798572484 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
@@ -18,6 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
@@ -81,7 +83,7 @@ public class GqlvActionParamValidate {
 
         val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
 
-        val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+        val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
         val usable = objectActionParameter.isUsable(actionInteractionHead, 
argumentManagedObjects, InteractionInitiatedBy.USER);
         return usable.isVetoed() ? 
usable.getReasonAsString().orElse("Invalid") : null;
@@ -93,5 +95,10 @@ public class GqlvActionParamValidate {
                     ObjectActionProvider,
                     ObjectActionParameterProvider {
         void addGqlArgument(ObjectAction objectAction, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext, int paramNum);
+
+        Can<ManagedObject> argumentManagedObjectsFor(
+                DataFetchingEnvironment dataFetchingEnvironment,
+                ObjectAction objectAction,
+                BookmarkService bookmarkService);
     }
 }
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 28d39d1c60..a96f6ace58 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
@@ -18,6 +18,9 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
 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;
@@ -27,6 +30,8 @@ import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider
 import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
+import graphql.schema.DataFetchingEnvironment;
+
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 
@@ -131,6 +136,14 @@ public class GqlvActionParams implements 
GqlvActionParam.Holder {
         holder.addGqlArguments(objectAction, fieldBuilder, inputContext, 
paramNum);
     }
 
+    @Override
+    public Can<ManagedObject> argumentManagedObjectsFor(
+            DataFetchingEnvironment dataFetchingEnvironment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService) {
+        return holder.argumentManagedObjectsFor(dataFetchingEnvironment, 
objectAction, bookmarkService);
+    }
+
     public interface Holder
             extends GqlvHolder,
                     ObjectSpecificationProvider,
@@ -141,5 +154,10 @@ public class GqlvActionParams implements 
GqlvActionParam.Holder {
                 GraphQLFieldDefinition.Builder fieldBuilder,
                 TypeMapper.InputContext inputContext,
                 int paramNum);
+
+        Can<ManagedObject> argumentManagedObjectsFor(
+                DataFetchingEnvironment dataFetchingEnvironment,
+                ObjectAction objectAction,
+                BookmarkService bookmarkService);
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
index 0974757570..7612b6d005 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java
@@ -20,12 +20,15 @@ package org.apache.causeway.viewer.graphql.model.types;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.Map;
 
 import graphql.Scalars;
 import graphql.schema.*;
 
 import lombok.experimental.UtilityClass;
+import lombok.val;
 
 import javax.annotation.Priority;
 import javax.ws.rs.NotSupportedException;
@@ -192,6 +195,40 @@ public class TypeMapper {
         }
     }
 
+    public Object adaptPojo(
+            final Object argumentValue,
+            final ObjectSpecification elementType) {
+        val elementClazz = elementType.getCorrespondingClass();
+
+        if (elementClazz.isEnum()) {
+            return Enum.valueOf((Class<Enum>) elementClazz, 
argumentValue.toString());
+        }
+
+        if (elementClazz == BigInteger.class) {
+            return BigInteger.valueOf((Integer) argumentValue);
+        }
+
+        if (elementClazz == BigDecimal.class) {
+            return BigDecimal.valueOf((Double) argumentValue);
+        }
+
+        if (elementClazz == LocalDate.class) {
+            String argumentStr = (String) argumentValue;
+            return LocalDate.parse(argumentStr, 
DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        }
+
+        if (elementClazz == org.joda.time.LocalDate.class) {
+            String argumentStr = (String) argumentValue;
+            return org.joda.time.LocalDate.parse(argumentStr, 
org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd"));
+        }
+
+        if (elementClazz == float.class || elementClazz == Float.class) {
+            return ((Double) argumentValue).floatValue();
+        }
+
+        return argumentValue;
+    }
+
     public enum InputContext {
         HIDE,
         DISABLE,

Reply via email to