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;