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