diff --git a/goofy-server/pom.xml b/goofy-server/pom.xml index 1eae5f8dddc925e8767c5f353d6af54a657d0c29..7131e6c50f49a3a035105e57f79eb8762e59c903 100644 --- a/goofy-server/pom.xml +++ b/goofy-server/pom.xml @@ -63,7 +63,7 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> - + <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> @@ -73,6 +73,12 @@ <artifactId>keycloak-admin-client</artifactId> </dependency> + <dependency> + <groupId>com.graphql-java</groupId> + <artifactId>graphql-java-spring-boot-starter-webmvc</artifactId> + <version>2.0</version> + </dependency> + <!-- own projects --> <dependency> <groupId>de.itvsh.ozg.pluto</groupId> @@ -84,7 +90,7 @@ <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> </dependency> - + <!-- aspectJ --> <dependency> <groupId>org.aspectj</groupId> @@ -205,19 +211,19 @@ -Amapstruct.unmappedTargetPolicy=ERROR </compilerArg> <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> - <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> + <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin> - + <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> diff --git a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/GraphQLDataFetchers.java b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/GraphQLDataFetchers.java new file mode 100644 index 0000000000000000000000000000000000000000..dd5fdd257d50faa7a5a3993fc3474681ebbdb6d0 --- /dev/null +++ b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/GraphQLDataFetchers.java @@ -0,0 +1,69 @@ +package de.itvsh.goofy.kommentar; + +import com.google.common.collect.ImmutableMap; +import graphql.schema.DataFetcher; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@Component +public class GraphQLDataFetchers { + + private static List<Map<String, String>> books = Arrays.asList( + ImmutableMap.of("id", "book-1", + "name", "Harry Potter and the Philosopher's Stone", + "pageCount", "223", + "authorId", "author-1"), + ImmutableMap.of("id", "book-2", + "name", "Moby Dick", + "pageCount", "635", + "authorId", "author-2"), + ImmutableMap.of("id", "book-3", + "name", "Interview with the vampire", + "pageCount", "371", + "authorId", "author-3") + ); + + private static List<Map<String, String>> authors = Arrays.asList( + ImmutableMap.of("id", "author-1", + "firstName", "Joanne", + "lastName", "Rowling"), + ImmutableMap.of("id", "author-2", + "firstName", "Herman", + "lastName", "Melville"), + ImmutableMap.of("id", "author-3", + "firstName", "Anne", + "lastName", "Rice") + ); + + public DataFetcher getBookByIdDataFetcher() { + return dataFetchingEnvironment -> { + String bookId = dataFetchingEnvironment.getArgument("id"); + return books + .stream() + .filter(book -> book.get("id").equals(bookId)) + .findFirst() + .orElse(null); + }; + } + + public DataFetcher getAuthorDataFetcher() { + return dataFetchingEnvironment -> { + Map<String,String> book = dataFetchingEnvironment.getSource(); + String authorId = book.get("authorId"); + return authors + .stream() + .filter(author -> author.get("id").equals(authorId)) + .findFirst() + .orElse(null); + }; + } + + public DataFetcher getGreetingDataFetcher() { + return dataFetchingEnvironment -> { + return "Hello World"; + }; + } +} \ No newline at end of file diff --git a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/GraphQLProvider.java b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/GraphQLProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..887a1c790e3bf9f886eb91f3c7446753844d3d51 --- /dev/null +++ b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/GraphQLProvider.java @@ -0,0 +1,58 @@ +package de.itvsh.goofy.kommentar; + +import com.google.common.base.Charsets; +import com.google.common.io.Resources; +import graphql.GraphQL; +import graphql.schema.GraphQLSchema; +import graphql.schema.idl.RuntimeWiring; +import graphql.schema.idl.SchemaGenerator; +import graphql.schema.idl.SchemaParser; +import graphql.schema.idl.TypeDefinitionRegistry; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.net.URL; + +import static graphql.schema.idl.TypeRuntimeWiring.newTypeWiring; + +@Component +public class GraphQLProvider { + + private GraphQL graphQL; + @Autowired + GraphQLDataFetchers graphQLDataFetchers; + + @Bean + public GraphQL graphQL() { + return graphQL; + } + + @PostConstruct + public void init() throws IOException { + URL url = Resources.getResource("schema.graphqls"); + String sdl = Resources.toString(url, Charsets.UTF_8); + GraphQLSchema graphQLSchema = buildSchema(sdl); + this.graphQL = GraphQL.newGraphQL(graphQLSchema).build(); + } + + private GraphQLSchema buildSchema(String sdl) { + TypeDefinitionRegistry typeRegistry = new SchemaParser().parse(sdl); + RuntimeWiring runtimeWiring = buildWiring(); + SchemaGenerator schemaGenerator = new SchemaGenerator(); + return schemaGenerator.makeExecutableSchema(typeRegistry, runtimeWiring); + } + + private RuntimeWiring buildWiring() { + return RuntimeWiring.newRuntimeWiring() + /*.type(newTypeWiring("Query") + .dataFetcher("bookById", graphQLDataFetchers.getBookByIdDataFetcher())) + .type(newTypeWiring("Book") + .dataFetcher("author", graphQLDataFetchers.getAuthorDataFetcher()))*/ + .type(newTypeWiring("Query") + .dataFetcher("greeting", graphQLDataFetchers.getGreetingDataFetcher())) + .build(); + } +} \ No newline at end of file diff --git a/goofy-server/src/main/resources/schema.graphqls b/goofy-server/src/main/resources/schema.graphqls new file mode 100644 index 0000000000000000000000000000000000000000..8f3f9ebb0785a7e0320c2817648c451560166540 --- /dev/null +++ b/goofy-server/src/main/resources/schema.graphqls @@ -0,0 +1,3 @@ +type Query { + greeting: String +} \ No newline at end of file