You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2022/01/23 13:44:52 UTC

[isis] 01/02: ISIS-2947: surfaces dummy domain, integrated to isis interaction

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

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

commit f7879e83050c081fdf83f420ec527796c269c8ed
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 23 12:57:50 2022 +0000

    ISIS-2947: surfaces dummy domain, integrated to isis interaction
---
 .run/DemoAppWicketJdo.run.xml                      |  9 +++
 .run/DemoAppWicketJpa (with graphiql).run.xml      | 12 ++++
 .run/DemoAppWicketJpa.run.xml                      | 11 +++
 .../config/application-graphiql.properties         |  1 +
 .../webapp/wicket/jdo/DemoAppWicketJdo.java        |  7 +-
 .../webapp/wicket/jpa/DemoAppWicketJpa.java        |  9 ++-
 ...xecutionStrategyResolvingWithinInteraction.java | 35 +++++++++
 .../graphql/viewer/source/MyGraphSource.java       | 84 ++++++++++++++++++++++
 .../viewer/source/dummydomain/LeaseRepository.java |  9 +++
 .../viewer/spring/GraphQlAutoConfiguration.java    |  1 +
 10 files changed, 175 insertions(+), 3 deletions(-)

diff --git a/.run/DemoAppWicketJdo.run.xml b/.run/DemoAppWicketJdo.run.xml
new file mode 100644
index 0000000..b2c56ba
--- /dev/null
+++ b/.run/DemoAppWicketJdo.run.xml
@@ -0,0 +1,9 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="DemoAppWicketJdo" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+    <option name="SPRING_BOOT_MAIN_CLASS" value="demoapp.webapp.wicket.jdo.DemoAppWicketJdo" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/DemoAppWicketJpa (with graphiql).run.xml b/.run/DemoAppWicketJpa (with graphiql).run.xml
new file mode 100644
index 0000000..c18886f
--- /dev/null
+++ b/.run/DemoAppWicketJpa (with graphiql).run.xml	
@@ -0,0 +1,12 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="DemoAppWicketJpa (with graphiql)" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+    <module name="demo-wicket-jpa" />
+    <option name="SPRING_BOOT_MAIN_CLASS" value="demoapp.webapp.wicket.jpa.DemoAppWicketJpa" />
+    <option name="ACTIVE_PROFILES" value="graphiql" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <option name="SHORTEN_COMMAND_LINE" value="ARGS_FILE" />
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/DemoAppWicketJpa.run.xml b/.run/DemoAppWicketJpa.run.xml
new file mode 100644
index 0000000..68ded5b
--- /dev/null
+++ b/.run/DemoAppWicketJpa.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="DemoAppWicketJpa" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+    <module name="demo-wicket-jpa" />
+    <option name="SPRING_BOOT_MAIN_CLASS" value="demoapp.webapp.wicket.jpa.DemoAppWicketJpa" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <option name="SHORTEN_COMMAND_LINE" value="ARGS_FILE" />
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/examples/demo/web/src/main/resources/config/application-graphiql.properties b/examples/demo/web/src/main/resources/config/application-graphiql.properties
new file mode 100644
index 0000000..1bd50b3
--- /dev/null
+++ b/examples/demo/web/src/main/resources/config/application-graphiql.properties
@@ -0,0 +1 @@
+spring.graphql.graphiql.enabled=true
diff --git a/examples/demo/wicket/jdo/src/main/java/demoapp/webapp/wicket/jdo/DemoAppWicketJdo.java b/examples/demo/wicket/jdo/src/main/java/demoapp/webapp/wicket/jdo/DemoAppWicketJdo.java
index 4dfec7a..6058e51 100644
--- a/examples/demo/wicket/jdo/src/main/java/demoapp/webapp/wicket/jdo/DemoAppWicketJdo.java
+++ b/examples/demo/wicket/jdo/src/main/java/demoapp/webapp/wicket/jdo/DemoAppWicketJdo.java
@@ -78,10 +78,15 @@ public class DemoAppWicketJdo extends SpringBootServletInitializer {
     	IsisPresets.prototyping();
         //IsisPresets.logging(WebRequestCycleForIsis.class, "debug");
 
-        System.setProperty("spring.profiles.active", "demo-jdo");
+        System.setProperty("spring.profiles.active", preservingAnyExisting("demo-jdo"));
 
         SpringApplication.run(new Class[] { DemoAppWicketJdo.class }, args);
 
     }
 
+    private static String preservingAnyExisting(String profile) {
+        val existingProfiles = System.getProperty("spring.profiles.active");
+        return existingProfiles == null ? profile : existingProfiles + "," + profile;
+    }
+
 }
diff --git a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
index adad1d1..39081ed 100644
--- a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
+++ b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
@@ -33,7 +33,8 @@ import org.apache.isis.valuetypes.markdown.persistence.jpa.IsisModuleValMarkdown
 import org.apache.isis.valuetypes.markdown.ui.wkt.IsisModuleValMarkdownUiWkt;
 import org.apache.isis.valuetypes.sse.ui.wkt.IsisModuleValSseUiWkt;
 import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
-import org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault;
+
+import lombok.val;
 
 import demoapp.web.DemoAppManifestJpa;
 import demoapp.webapp.wicket.common.ui.DemoAppWicketCommon;
@@ -82,12 +83,16 @@ public class DemoAppWicketJpa extends SpringBootServletInitializer {
         //IsisPresets.logging(EntityModel.class, "debug");
         //IsisPresets.logging(FormExecutorDefault.class, "debug");
 
-        System.setProperty("spring.profiles.active", "demo-jpa");
+        System.setProperty("spring.profiles.active", preservingAnyExisting("demo-jpa"));
 
         SpringApplication.run(new Class[] { DemoAppWicketJpa.class }, args);
 
     }
 
+    private static String preservingAnyExisting(String profile) {
+        val existingProfiles = System.getProperty("spring.profiles.active");
+        return existingProfiles == null ? profile : existingProfiles + "," + profile;
+    }
 
 
 }
diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/ExecutionStrategyResolvingWithinInteraction.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/ExecutionStrategyResolvingWithinInteraction.java
new file mode 100644
index 0000000..50bda04
--- /dev/null
+++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/ExecutionStrategyResolvingWithinInteraction.java
@@ -0,0 +1,35 @@
+package org.apache.isis.viewer.graphql.viewer.source;
+
+import java.util.concurrent.CompletableFuture;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.iactnlayer.InteractionService;
+
+import lombok.RequiredArgsConstructor;
+
+import graphql.execution.AsyncExecutionStrategy;
+import graphql.execution.ExecutionContext;
+import graphql.execution.ExecutionStrategyParameters;
+import graphql.execution.FieldValueInfo;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+public class ExecutionStrategyResolvingWithinInteraction extends AsyncExecutionStrategy {
+
+    private final InteractionService interactionService;
+
+    @Override
+    protected CompletableFuture<FieldValueInfo> resolveFieldWithInfo(ExecutionContext executionContext, ExecutionStrategyParameters parameters) {
+
+        interactionService.openInteraction();
+        try {
+            return super.resolveFieldWithInfo(executionContext, parameters);
+        } finally {
+            interactionService.closeInteractionLayers();
+        }
+
+    }
+}
diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/MyGraphSource.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/MyGraphSource.java
new file mode 100644
index 0000000..18ae6f1
--- /dev/null
+++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/MyGraphSource.java
@@ -0,0 +1,84 @@
+package org.apache.isis.viewer.graphql.viewer.source;
+
+import javax.inject.Inject;
+
+import org.springframework.graphql.execution.GraphQlSource;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.viewer.graphql.viewer.source.dummydomain.LeaseRepository;
+
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+
+import graphql.GraphQL;
+import graphql.Scalars;
+import graphql.execution.AsyncExecutionStrategy;
+import graphql.execution.instrumentation.tracing.TracingInstrumentation;
+import graphql.schema.DataFetcher;
+import graphql.schema.GraphQLCodeRegistry;
+import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLObjectType;
+import graphql.schema.GraphQLSchema;
+import graphql.schema.GraphQLTypeReference;
+
+import static graphql.schema.FieldCoordinates.coordinates;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+public class MyGraphSource implements GraphQlSource {
+
+    private final LeaseRepository leaseRepository;
+    private final ExecutionStrategyResolvingWithinInteraction executionStrategy;
+
+    @Override
+    public GraphQL graphQl() {
+        // val asyncExecutionStrategy = new AsyncExecutionStrategy();
+        return GraphQL.newGraphQL(schema())
+                .instrumentation(new TracingInstrumentation())
+                .queryExecutionStrategy(executionStrategy)
+                .build();
+    }
+
+    @Override
+    public GraphQLSchema schema() {
+
+        // type LeaseRepository {
+        //     numLeases: Int
+        // }
+        val leaseRepository_numLeases = GraphQLFieldDefinition.newFieldDefinition()
+                .name("numLeases")
+                .type(Scalars.GraphQLInt)
+                .build();
+        val leaseRepositoryType = GraphQLObjectType.newObject()
+                .name("LeaseRepository")
+                .field(leaseRepository_numLeases)
+                .build();
+
+        // type Query {
+        //     leaseRepo: LeaseRepository
+        // }
+        val query_leaseRepo = GraphQLFieldDefinition.newFieldDefinition()
+                .name("leaseRepo")
+                .type(GraphQLTypeReference.typeRef(leaseRepositoryType.getName()))
+                .build();
+        GraphQLObjectType query = GraphQLObjectType.newObject()
+                .name("Query")
+                .field(query_leaseRepo)
+                .build();
+
+        val codeRegistry = GraphQLCodeRegistry.newCodeRegistry()
+                .dataFetcher(coordinates(query.getName(), query_leaseRepo.getName()),
+                        (DataFetcher<Object>) environment -> leaseRepository)
+                .dataFetcher(coordinates(leaseRepositoryType.getName(), leaseRepository_numLeases.getName()),
+                        (DataFetcher<Object>) environment -> leaseRepository.numLeases)
+                .build();
+
+
+        return GraphQLSchema.newSchema()
+                .query(query)
+                .additionalType(leaseRepositoryType)
+                .codeRegistry(codeRegistry)
+                .build();
+    }
+
+}
diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/dummydomain/LeaseRepository.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/dummydomain/LeaseRepository.java
new file mode 100644
index 0000000..2aceb33
--- /dev/null
+++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/source/dummydomain/LeaseRepository.java
@@ -0,0 +1,9 @@
+package org.apache.isis.viewer.graphql.viewer.source.dummydomain;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class LeaseRepository {
+
+    public int numLeases = 5;
+}
diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/spring/GraphQlAutoConfiguration.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/spring/GraphQlAutoConfiguration.java
index e070078..e16fcf43 100644
--- a/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/spring/GraphQlAutoConfiguration.java
+++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/isis/viewer/graphql/viewer/spring/GraphQlAutoConfiguration.java
@@ -24,6 +24,7 @@ import java.util.stream.Collectors;
 
 import graphql.GraphQL;
 import graphql.execution.instrumentation.Instrumentation;
+import graphql.schema.idl.RuntimeWiring;
 import graphql.schema.visibility.NoIntrospectionGraphqlFieldVisibility;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;