This is an automated email from the ASF dual-hosted git repository.

jdoornenbal pushed a commit to branch ISIS-2947
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-2947 by this push:
     new f4ee2fd1f3 implements data fetching for input type (entity)
f4ee2fd1f3 is described below

commit f4ee2fd1f391988ded62e431995c7b4432cbfe4e
Author: Johan Doornenbal <[email protected]>
AuthorDate: Fri May 27 17:00:10 2022 +0200

    implements data fetching for input type (entity)
---
 .../graphql/viewer/source/ObjectTypeFactory.java   | 38 +++++++++++++---------
 .../EndToEnd_IntegTest.changeE1.approved.gql       | 16 +++++++++
 .../source/EndToEnd_IntegTest.changeE1.submit.gql  | 14 ++++++++
 .../graphql/viewer/source/EndToEnd_IntegTest.java  | 38 ++++++++++++++++++++++
 .../viewer/src/test/resources/application-test.yml |  5 +++
 5 files changed, 96 insertions(+), 15 deletions(-)

diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/ObjectTypeFactory.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/ObjectTypeFactory.java
index 5a3270e9b5..65c843de66 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/ObjectTypeFactory.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/ObjectTypeFactory.java
@@ -18,14 +18,17 @@
  */
 package org.apache.isis.viewer.graphql.viewer.source;
 
+import java.awt.print.Book;
 import java.util.*;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
+import graphql.schema.*;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import 
org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
+import org.apache.isis.core.metamodel.objectmanager.load.ObjectLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.springframework.stereotype.Component;
@@ -49,20 +52,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 import graphql.Scalars;
-import graphql.schema.DataFetcher;
-import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.FieldCoordinates;
-import graphql.schema.GraphQLArgument;
-import graphql.schema.GraphQLCodeRegistry;
-import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLInputObjectField;
-import graphql.schema.GraphQLInputObjectType;
-import graphql.schema.GraphQLInputType;
-import graphql.schema.GraphQLList;
-import graphql.schema.GraphQLObjectType;
-import graphql.schema.GraphQLOutputType;
-import graphql.schema.GraphQLType;
-import graphql.schema.GraphQLTypeReference;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLInputObjectType.newInputObject;
@@ -199,7 +188,20 @@ public class ObjectTypeFactory {
 
                                                     if (argumentValue == null)
                                                         return 
ManagedObject.empty(elementType);
-                                                    return 
ManagedObject.of(elementType, argumentValue);
+                                                    switch 
(elementType.getBeanSort()){
+                                                        case ENTITY:
+                                                            return 
getManagedObjectFromInputType(elementType, argumentValue);
+
+                                                        case COLLECTION:
+                                                            /* TODO */
+                                                            throw new 
RuntimeException("Not yet implemented");
+
+                                                        case VALUE:
+                                                            return 
ManagedObject.of(elementType, argumentValue);
+
+                                                        default:
+                                                            throw new 
RuntimeException("Not yet implemented");
+                                                    }
 
 
                                                 }).collect(Can.toCan());
@@ -216,7 +218,13 @@ public class ObjectTypeFactory {
                 }
         );
 
+    }
 
+    private ManagedObject getManagedObjectFromInputType(ObjectSpecification 
elementType, Object argumentValue) {
+        LinkedHashMap map = (LinkedHashMap) argumentValue;
+        String identifier = (String) map.get("id");
+        Bookmark bookmark = 
Bookmark.forLogicalTypeNameAndIdentifier(elementType.getLogicalTypeName(), 
identifier);
+        return 
bookmarkService.lookup(bookmark).map(p->ManagedObject.of(elementType, 
p)).orElse(ManagedObject.empty(elementType));
     }
 
     void addTypeIfNotAlreadyPresent(
diff --git 
a/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.changeE1.approved.gql
 
b/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.changeE1.approved.gql
new file mode 100644
index 0000000000..ac9c625b53
--- /dev/null
+++ 
b/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.changeE1.approved.gql
@@ -0,0 +1,16 @@
+{
+  "data" : {
+    "gqltestdomain_GQLTestDomainMenu" : {
+      "findE2" : {
+        "name" : "foo",
+        "_gql_mutations" : {
+          "changeE1" : {
+            "e1" : {
+              "name" : "alternativeE1"
+            }
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.changeE1.submit.gql
 
b/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.changeE1.submit.gql
new file mode 100644
index 0000000000..4dfc404a7d
--- /dev/null
+++ 
b/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.changeE1.submit.gql
@@ -0,0 +1,14 @@
+{
+  gqltestdomain_GQLTestDomainMenu {
+    findE2(name:"foo") {
+      name,
+      _gql_mutations {
+        changeE1(e1 : {id : 2} ) {
+          e1 {
+            name
+          }
+        }
+      }
+    }
+  }
+}
diff --git 
a/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.java
 
b/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.java
index f5463573ba..de7049c76d 100644
--- 
a/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.java
+++ 
b/incubator/viewers/graphql/viewer/src/test/java/org/apache/isis/viewer/graphql/viewer/source/EndToEnd_IntegTest.java
@@ -209,6 +209,44 @@ public class EndToEnd_IntegTest extends 
TestDomainModuleIntegTestAbstract {
 
     }
 
+    @Test
+    @UseReporter(TextWebReporter.class)
+    void changeE1() throws Exception {
+
+        // given
+        List<E1> e1List = new ArrayList<>();
+        List<E2> e2List = new ArrayList<>();
+
+        transactionService.runTransactional(Propagation.REQUIRED, () -> {
+            E1 e1 = testEntityRepository.createE1("e1", null);
+            e1List.add(e1);
+            e1List.add(testEntityRepository.createE1("alternativeE1", null));
+            e2List.add(testEntityRepository.createE2("foo", e1));
+
+        });
+
+        E1 e1 = e1List.get(0);
+        assertEquals("e1", e1.getName());
+        E1 e1Alt = e1List.get(1);
+        assertEquals("alternativeE1", e1Alt.getName());
+
+
+        E2 e2 = e2List.get(0);
+        assertEquals("foo", e2.getName());
+        assertEquals(e1, e2.getE1());
+
+        // when
+        String response = 
transactionService.callTransactional(Propagation.REQUIRED, () -> {
+
+            return submit();
+
+        }).ifFailureFail().getValue().get();
+
+        Approvals.verify(response, gqlOptions());
+
+
+    }
+
 
     private String submit() throws Exception{
         val httpRequest = buildRequestWithResource();
diff --git 
a/incubator/viewers/graphql/viewer/src/test/resources/application-test.yml 
b/incubator/viewers/graphql/viewer/src/test/resources/application-test.yml
index 6614ebb7c4..54080914c5 100644
--- a/incubator/viewers/graphql/viewer/src/test/resources/application-test.yml
+++ b/incubator/viewers/graphql/viewer/src/test/resources/application-test.yml
@@ -2,3 +2,8 @@ isis:
   persistence:
     schema:
       auto-create-schemas: "demo"
+
+spring:
+  graphql:
+    graphiql:
+      enabled: true

Reply via email to