From 5ebedbe0673687f3d7aec200c223f033e633c173 Mon Sep 17 00:00:00 2001 From: Vince250598 Date: Thu, 23 May 2019 16:33:14 -0400 Subject: [PATCH] Modified code to implement GraphQL-spqr library to simplify GraphQL API and added Artefact class to store source code in a better way. --- .gitignore | 29 ++++ .mvn/wrapper/MavenWrapperDownloader.java | 114 ++++++++++++++ .mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .mvn/wrapper/maven-wrapper.properties | 1 + .project | 5 + .settings/org.eclipse.jdt.core.prefs | 1 + HELP.md | 9 +- mvnw | 2 +- mvnw.cmd | 2 +- pom.xml | 30 +--- .../java/com/swarm/graphql/MainConfig.java | 144 +++++------------- .../graphql/SwarmGraphQlApplication.java | 1 + .../com/swarm/graphql/model/Artefact.java | 79 ++++++++++ .../com/swarm/graphql/model/Breakpoint.java | 54 ++++--- .../com/swarm/graphql/model/Developer.java | 37 +++-- .../java/com/swarm/graphql/model/Event.java | 15 +- .../com/swarm/graphql/model/Invocation.java | 16 +- .../java/com/swarm/graphql/model/Method.java | 15 +- .../com/swarm/graphql/model/Namespace.java | 58 +++---- .../java/com/swarm/graphql/model/Product.java | 26 ++-- .../java/com/swarm/graphql/model/Session.java | 17 ++- .../java/com/swarm/graphql/model/Task.java | 31 ++-- .../java/com/swarm/graphql/model/Type.java | 33 ++-- .../java/com/swarm/graphql/query/Query.java | 10 -- .../swarm/graphql/query/QueryDeveloper.java | 15 -- .../com/swarm/graphql/query/QueryEvent.java | 15 -- .../swarm/graphql/query/QueryInvocation.java | 19 --- .../com/swarm/graphql/query/QueryMethod.java | 32 ---- .../swarm/graphql/query/QueryNamespace.java | 19 --- .../com/swarm/graphql/query/QueryType.java | 19 --- .../repository/ArtefactRepository.java | 9 ++ .../repository/BreakpointRepository.java | 11 +- .../repository/DeveloperRepository.java | 4 +- .../repository/InvocationRepository.java | 18 ++- .../graphql/repository/MethodRepository.java | 15 +- .../repository/NamespaceRepository.java | 2 +- .../graphql/repository/SessionRepository.java | 7 +- .../graphql/repository/TypeRepository.java | 17 ++- .../graphql/resolver/BreakpointResolver.java | 18 --- .../swarm/graphql/resolver/EventResolver.java | 24 --- .../graphql/resolver/InvocationResolver.java | 28 ---- .../graphql/resolver/MethodResolver.java | 18 --- .../graphql/resolver/SessionResolver.java | 24 --- .../swarm/graphql/resolver/TaskResolver.java | 19 --- .../swarm/graphql/resolver/TypeResolver.java | 24 --- .../graphql/service/ArtefactService.java | 33 ++++ .../BreakpointService.java} | 25 ++- .../graphql/service/DeveloperService.java | 26 ++++ .../swarm/graphql/service/EventService.java | 19 +++ .../graphql/service/InvocationService.java | 26 ++++ .../swarm/graphql/service/MethodService.java | 44 ++++++ .../graphql/service/NamespaceService.java | 26 ++++ .../ProductService.java} | 20 ++- .../SessionService.java} | 54 ++++--- .../TaskService.java} | 25 ++- .../swarm/graphql/service/TypeService.java | 26 ++++ src/main/resources/application.properties | 5 +- .../resources/graphql/breakpoint.graphqls | 13 -- src/main/resources/graphql/developer.graphqls | 5 - src/main/resources/graphql/event.graphqls | 10 -- .../resources/graphql/invocation.graphqls | 10 -- src/main/resources/graphql/method.graphqls | 14 -- src/main/resources/graphql/namespace.graphqls | 9 -- src/main/resources/graphql/product.graphqls | 8 - src/main/resources/graphql/session.graphqls | 21 --- src/main/resources/graphql/swarmdbg.graphqls | 3 - src/main/resources/graphql/task.graphqls | 13 -- src/main/resources/graphql/type.graphqls | 14 -- .../com/swarm/graphql/ScalarDateTest.java | 3 +- .../graphql/SwarmGraphQlApplicationTest.java | 3 +- .../com/swarm/graphql/query/AllTests.java | 4 +- .../graphql/query/QueryBreakpointTest.java | 5 +- .../graphql/query/QueryInvocationTest.java | 6 +- .../swarm/graphql/query/QueryMethodTest.java | 6 +- .../graphql/query/QueryNamespaceTest.java | 6 +- .../swarm/graphql/query/QuerySessionTest.java | 6 +- .../swarm/graphql/query/QueryTaskTest.java | 6 +- .../com/swarm/graphql/query/QueryTest.java | 4 +- .../swarm/graphql/query/QueryTypeTest.java | 3 +- .../com/swarm/graphql/query/TestRunner.java | 3 +- target/classes/application.properties | 5 +- .../com/swarm/graphql/MainConfig.class | Bin 14526 -> 9029 bytes .../com/swarm/graphql/ScalarDate$1.class | Bin 1048 -> 1170 bytes .../graphql/SwarmGraphQlApplication.class | Bin 730 -> 759 bytes .../com/swarm/graphql/model/Breakpoint.class | Bin 2999 -> 3103 bytes .../com/swarm/graphql/model/Developer.class | Bin 2476 -> 2561 bytes .../com/swarm/graphql/model/Event.class | Bin 3751 -> 3900 bytes .../com/swarm/graphql/model/Invocation.class | Bin 3155 -> 3259 bytes .../com/swarm/graphql/model/Method.class | Bin 2964 -> 3068 bytes .../com/swarm/graphql/model/Namespace.class | Bin 2254 -> 2328 bytes .../com/swarm/graphql/model/Product.class | Bin 1974 -> 2033 bytes .../com/swarm/graphql/model/Session.class | Bin 4083 -> 4247 bytes .../com/swarm/graphql/model/Task.class | Bin 2807 -> 2911 bytes .../com/swarm/graphql/model/Type.class | Bin 3544 -> 3797 bytes .../repository/BreakpointRepository.class | Bin 2364 -> 2563 bytes .../repository/DeveloperRepository.class | Bin 958 -> 916 bytes .../repository/InvocationRepository.class | Bin 2122 -> 2340 bytes .../graphql/repository/MethodRepository.class | Bin 1759 -> 1898 bytes .../repository/NamespaceRepository.class | Bin 561 -> 591 bytes .../repository/SessionRepository.class | Bin 1078 -> 1145 bytes .../graphql/repository/TypeRepository.class | Bin 1555 -> 1566 bytes target/test-classes/outils/JsonReader.class | Bin 1726 -> 1767 bytes 102 files changed, 827 insertions(+), 768 deletions(-) create mode 100644 .gitignore create mode 100644 .mvn/wrapper/MavenWrapperDownloader.java create mode 100644 .mvn/wrapper/maven-wrapper.jar create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 src/main/java/com/swarm/graphql/model/Artefact.java delete mode 100644 src/main/java/com/swarm/graphql/query/Query.java delete mode 100644 src/main/java/com/swarm/graphql/query/QueryDeveloper.java delete mode 100644 src/main/java/com/swarm/graphql/query/QueryEvent.java delete mode 100644 src/main/java/com/swarm/graphql/query/QueryInvocation.java delete mode 100644 src/main/java/com/swarm/graphql/query/QueryMethod.java delete mode 100644 src/main/java/com/swarm/graphql/query/QueryNamespace.java delete mode 100644 src/main/java/com/swarm/graphql/query/QueryType.java create mode 100644 src/main/java/com/swarm/graphql/repository/ArtefactRepository.java delete mode 100644 src/main/java/com/swarm/graphql/resolver/BreakpointResolver.java delete mode 100644 src/main/java/com/swarm/graphql/resolver/EventResolver.java delete mode 100644 src/main/java/com/swarm/graphql/resolver/InvocationResolver.java delete mode 100644 src/main/java/com/swarm/graphql/resolver/MethodResolver.java delete mode 100644 src/main/java/com/swarm/graphql/resolver/SessionResolver.java delete mode 100644 src/main/java/com/swarm/graphql/resolver/TaskResolver.java delete mode 100644 src/main/java/com/swarm/graphql/resolver/TypeResolver.java create mode 100644 src/main/java/com/swarm/graphql/service/ArtefactService.java rename src/main/java/com/swarm/graphql/{query/QueryBreakpoint.java => service/BreakpointService.java} (71%) create mode 100644 src/main/java/com/swarm/graphql/service/DeveloperService.java create mode 100644 src/main/java/com/swarm/graphql/service/EventService.java create mode 100644 src/main/java/com/swarm/graphql/service/InvocationService.java create mode 100644 src/main/java/com/swarm/graphql/service/MethodService.java create mode 100644 src/main/java/com/swarm/graphql/service/NamespaceService.java rename src/main/java/com/swarm/graphql/{query/QueryProduct.java => service/ProductService.java} (88%) rename src/main/java/com/swarm/graphql/{query/QuerySession.java => service/SessionService.java} (87%) rename src/main/java/com/swarm/graphql/{query/QueryTask.java => service/TaskService.java} (88%) create mode 100644 src/main/java/com/swarm/graphql/service/TypeService.java delete mode 100644 src/main/resources/graphql/breakpoint.graphqls delete mode 100644 src/main/resources/graphql/developer.graphqls delete mode 100644 src/main/resources/graphql/event.graphqls delete mode 100644 src/main/resources/graphql/invocation.graphqls delete mode 100644 src/main/resources/graphql/method.graphqls delete mode 100644 src/main/resources/graphql/namespace.graphqls delete mode 100644 src/main/resources/graphql/product.graphqls delete mode 100644 src/main/resources/graphql/session.graphqls delete mode 100644 src/main/resources/graphql/swarmdbg.graphqls delete mode 100644 src/main/resources/graphql/task.graphqls delete mode 100644 src/main/resources/graphql/type.graphqls diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..153c933 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +HELP.md +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 + + org.springframework.ide.eclipse.boot.validation.springbootbuilder + + + org.eclipse.m2e.core.maven2Builder diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index b8947ec..9c81ef9 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,5 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning diff --git a/HELP.md b/HELP.md index 8b6a26a..72c5741 100644 --- a/HELP.md +++ b/HELP.md @@ -1,10 +1,15 @@ # Getting Started +### Reference Documentation +For further reference, please consider the following sections: + +* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html) + ### Guides -The following guides illustrates how to use certain features concretely: +The following guides illustrate how to use some features concretely: +* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/) * [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) * [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) * [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/) -* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/) diff --git a/mvnw b/mvnw index 5551fde..8b9da3b 100644 --- a/mvnw +++ b/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an diff --git a/mvnw.cmd b/mvnw.cmd index e5cfb0a..fef5a8f 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an diff --git a/pom.xml b/pom.xml index e896745..befe652 100644 --- a/pom.xml +++ b/pom.xml @@ -5,14 +5,14 @@ org.springframework.boot spring-boot-starter-parent - 1.5.9.RELEASE + 2.1.5.RELEASE - com.swarm - graphql + com.spqr.test + spqrTest 0.0.1-SNAPSHOT - SwarmGraphQL - Demo project for Spring Boot + spqrTest + Swarm Debugging Server using graphql-spqr 1.8 @@ -38,31 +38,17 @@ spring-boot-starter-test test - - com.graphql-java - graphql-spring-boot-starter - 3.10.0 - - - - com.graphql-java - graphql-java-tools - 4.3.0 + io.leangen.graphql + graphql-spqr-spring-boot-starter + 0.0.3 com.graphql-java graphiql-spring-boot-starter 3.10.0 - - org.projectlombok - lombok - true - - - diff --git a/src/main/java/com/swarm/graphql/MainConfig.java b/src/main/java/com/swarm/graphql/MainConfig.java index 009fe3b..4912311 100644 --- a/src/main/java/com/swarm/graphql/MainConfig.java +++ b/src/main/java/com/swarm/graphql/MainConfig.java @@ -7,117 +7,25 @@ import org.springframework.context.annotation.Configuration; import com.swarm.graphql.model.*; -import com.swarm.graphql.query.Query; -import com.swarm.graphql.query.QueryBreakpoint; -import com.swarm.graphql.query.QueryDeveloper; -import com.swarm.graphql.query.QueryEvent; -import com.swarm.graphql.query.QueryInvocation; -import com.swarm.graphql.query.QueryMethod; -import com.swarm.graphql.query.QueryNamespace; -import com.swarm.graphql.query.QueryProduct; -import com.swarm.graphql.query.QuerySession; -import com.swarm.graphql.query.QueryTask; -import com.swarm.graphql.query.QueryType; -import com.swarm.graphql.repository.*; -import com.swarm.graphql.resolver.*; +import com.swarm.graphql.repository.ArtefactRepository; +import com.swarm.graphql.repository.BreakpointRepository; +import com.swarm.graphql.repository.DeveloperRepository; +import com.swarm.graphql.repository.EventRepository; +import com.swarm.graphql.repository.InvocationRepository; +import com.swarm.graphql.repository.MethodRepository; +import com.swarm.graphql.repository.NamespaceRepository; +import com.swarm.graphql.repository.ProductRepository; +import com.swarm.graphql.repository.SessionRepository; +import com.swarm.graphql.repository.TaskRepository; +import com.swarm.graphql.repository.TypeRepository; @Configuration public class MainConfig { - @Bean - public SessionResolver developerResolver(DeveloperRepository developerRepository, TaskRepository taskRepository) { - return new SessionResolver(developerRepository, taskRepository); - } - - @Bean - public TaskResolver taskResolver(ProductRepository productRepository) { - return new TaskResolver(productRepository); - } - - @Bean - public TypeResolver typeResolver(NamespaceRepository namespaceRepository, SessionRepository sessionRepository) { - return new TypeResolver(namespaceRepository, sessionRepository); - } - - @Bean - public BreakpointResolver breakpointResolver(TypeRepository typeRepository) { - return new BreakpointResolver(typeRepository); - } - - @Bean - public MethodResolver methodResolver(TypeRepository typeRepository) { - return new MethodResolver(typeRepository); - } - - @Bean - public InvocationResolver invocationResolver(SessionRepository sessionRepository, MethodRepository methodRepository) { - return new InvocationResolver(sessionRepository, methodRepository); - } - - @Bean - public EventResolver eventResolver(SessionRepository sessionRepository, MethodRepository methodRepository) { - return new EventResolver(sessionRepository, methodRepository); - } - - @Bean - public Query query() { - return new Query(); - } - - @Bean - public QueryBreakpoint queryBreakPoint(BreakpointRepository breakpointRepository, ProductRepository productRepository) { - return new QueryBreakpoint(breakpointRepository, productRepository); - } - - @Bean - public QueryDeveloper queryDeveloper(DeveloperRepository developerRepository) { - return new QueryDeveloper(developerRepository); - } - - @Bean - public QueryTask queryTask(TaskRepository taskRepository, TypeRepository typeRepository, BreakpointRepository breakpointRepository) { - return new QueryTask(taskRepository, typeRepository, breakpointRepository); - } - - @Bean - - public QueryProduct queryProduct(ProductRepository productRepository,InvocationRepository invocationRepository,TypeRepository typeRepository) { - return new QueryProduct(productRepository, invocationRepository, typeRepository); - } - - @Bean - public QueryNamespace queryNamespace(NamespaceRepository namespaceRepository) { - return new QueryNamespace(namespaceRepository); - } - - @Bean - public QuerySession querySession(SessionRepository sessionRepository, TypeRepository typeRepository, MethodRepository methodRepository, InvocationRepository invocationRepository) { - return new QuerySession(sessionRepository, typeRepository, methodRepository, invocationRepository); - } - - @Bean - public QueryInvocation queryInvocation(InvocationRepository invocationRepository) { - return new QueryInvocation(invocationRepository); - } - - @Bean - public QueryType queryType(TypeRepository typeRepository) { - return new QueryType(typeRepository); - } - - @Bean - public QueryMethod queryMethod(MethodRepository methodRepository, SessionRepository sessionRepository) { - return new QueryMethod(methodRepository, sessionRepository); - } - - @Bean - public QueryEvent queryEvent(EventRepository eventRepository) { - return new QueryEvent(eventRepository); - } - @Bean public CommandLineRunner test( DeveloperRepository developerRepository, + ArtefactRepository artefactRepository, SessionRepository sessionRepository, TaskRepository taskRepository, ProductRepository productRepository, @@ -129,8 +37,24 @@ public CommandLineRunner test( EventRepository eventRepository) { return (args) -> { - Developer developer1 = new Developer("developer1.name", "developer1.color"); - Developer developer2 = new Developer("developer2.name", "developer2.color"); + Developer developer1 = new Developer("Jean-Guy", "developer1.color"); + Developer developer2 = new Developer("Robert", "developer2.color"); + + Artefact artefact1 = new Artefact("public class HelloWorld {\r\n" + + "\r\n" + + " public static void main(String[] args) {\r\n" + + " // Prints \"Hello, World\" to the terminal window.\r\n" + + " System.out.println(\"Hello, World\");\r\n" + + " }\r\n" + + "\r\n" + + "}", 1L); + Artefact artefact2 = new Artefact("class ForLoopExample2 {\r\n" + + " public static void main(String args[]){\r\n" + + " for(int i=1; i>=1; i++){\r\n" + + " System.out.println(\"The value of i is: \"+i);\r\n" + + " }\r\n" + + " }\r\n" + + "}", 4L); Product product1 = new Product("product1.name"); Product product2 = new Product("product2.name"); @@ -146,8 +70,8 @@ public CommandLineRunner test( Namespace namespace1 = new Namespace("namespace1.name","namespace1.fullPath"); Namespace namespace2 = new Namespace("namespace2.name","namespace2.fullPath"); - Type type1 = new Type(namespace1, session1, "type1.fullName","type1.fullPath", "type1.name","type1.source"); - Type type2 = new Type(namespace2, session2, "type2.fullName","type2.fullPath", "type2.name","type2.source"); + Type type1 = new Type(namespace1, session1, "type1.fullName","type1.fullPath", "type1.name",artefact1); + Type type2 = new Type(namespace2, session2, "type2.fullName","type2.fullPath", "type2.name",artefact2); Breakpoint breakpoint1 = new Breakpoint(type1,"breakpoint1.start","breakpoint1.end",59); Breakpoint breakpoint2 = new Breakpoint(type2,"breakpoint2.start","breakpoint2.end",374); @@ -161,6 +85,8 @@ public CommandLineRunner test( developerRepository.save(developer1); developerRepository.save(developer2); + artefactRepository.save(artefact1); + artefactRepository.save(artefact2); productRepository.save(product1); productRepository.save(product2); taskRepository.save(task1); @@ -179,5 +105,7 @@ public CommandLineRunner test( eventRepository.save(event1); }; } + + } diff --git a/src/main/java/com/swarm/graphql/SwarmGraphQlApplication.java b/src/main/java/com/swarm/graphql/SwarmGraphQlApplication.java index 7bcd53d..f3d63cb 100644 --- a/src/main/java/com/swarm/graphql/SwarmGraphQlApplication.java +++ b/src/main/java/com/swarm/graphql/SwarmGraphQlApplication.java @@ -9,4 +9,5 @@ public class SwarmGraphQlApplication { public static void main(String[] args) { SpringApplication.run(SwarmGraphQlApplication.class, args); } + } diff --git a/src/main/java/com/swarm/graphql/model/Artefact.java b/src/main/java/com/swarm/graphql/model/Artefact.java new file mode 100644 index 0000000..1024dd4 --- /dev/null +++ b/src/main/java/com/swarm/graphql/model/Artefact.java @@ -0,0 +1,79 @@ +package com.swarm.graphql.model; + +import java.util.Calendar; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + + +@Entity +public class Artefact { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + String sourceCode; + + @Column(nullable=false) + Long version; + + @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) + private Calendar timestamp; + + public Artefact() {} + + public Artefact(String sourceCode, Long version) { + this.sourceCode = sourceCode; + this.version = version; + } + + @Override + public int hashCode() { + return id.hashCode(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Artefact artefact = (Artefact) o; + + return id.equals(artefact.id); + } + + @Override + public String toString() { + return id + ": " + sourceCode; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSourceCode() + { + return sourceCode; + } + + public void setSourceCode(String sourceCode) { + this.sourceCode = sourceCode; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } + +} diff --git a/src/main/java/com/swarm/graphql/model/Breakpoint.java b/src/main/java/com/swarm/graphql/model/Breakpoint.java index 4b5a388..e325a64 100644 --- a/src/main/java/com/swarm/graphql/model/Breakpoint.java +++ b/src/main/java/com/swarm/graphql/model/Breakpoint.java @@ -2,11 +2,17 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + @Entity public class Breakpoint { - + @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @@ -26,8 +32,7 @@ public class Breakpoint { @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) private Calendar timestamp; - public Breakpoint() { - } + public Breakpoint() {} public Breakpoint(Type type, String charStart, String charEnd, Integer lineNumber) { this.type = type; @@ -36,6 +41,26 @@ public Breakpoint(Type type, String charStart, String charEnd, Integer lineNumbe this.lineNumber = lineNumber; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Breakpoint breakpoint = (Breakpoint) o; + + return id.equals(breakpoint.id); + } + + @Override + public int hashCode() { + return id.hashCode(); + } + + @Override + public String toString() { + return id + ": " + lineNumber; + } + public Long getId() { return id; } @@ -75,25 +100,4 @@ public Integer getLineNumber() { public void setLineNumber(Integer lineNumber) { this.lineNumber = lineNumber; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Breakpoint breakpoint = (Breakpoint) o; - - return id.equals(breakpoint.id); - } - - @Override - public int hashCode() { - return id.hashCode(); - } - - @Override - public String toString() { - return id + ": " + lineNumber; - } - } diff --git a/src/main/java/com/swarm/graphql/model/Developer.java b/src/main/java/com/swarm/graphql/model/Developer.java index 38572be..a4d2fe2 100644 --- a/src/main/java/com/swarm/graphql/model/Developer.java +++ b/src/main/java/com/swarm/graphql/model/Developer.java @@ -2,14 +2,20 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Transient; + @Entity public class Developer { @Id - @GeneratedValue(strategy=GenerationType.AUTO) - private Long id; + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; @Column(nullable = false) String name; @@ -22,38 +28,37 @@ public class Developer { @Transient boolean logged; - public Developer() { - } - public Developer(String name, String color) { this.name = name; this.color = color; } + public Developer() {} + public Long getId() { - return id; - } - + return id; + } + public void setId(Long id) { - this.id = id; - } - + this.id = id; + } + public String getName() { return name; } - + public void setName(String name) { this.name = name; } - + public String getColor() { return color; } - + public void setColor(String color) { this.color = color; } - + public boolean isLogged() { return logged; } diff --git a/src/main/java/com/swarm/graphql/model/Event.java b/src/main/java/com/swarm/graphql/model/Event.java index 99be098..2fa8ada 100644 --- a/src/main/java/com/swarm/graphql/model/Event.java +++ b/src/main/java/com/swarm/graphql/model/Event.java @@ -2,11 +2,17 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + @Entity public class Event { - + @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @@ -30,8 +36,7 @@ public class Event { @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) private Calendar timestamp; - public Event() { - } + public Event () {} public Event(Method method, Session session, String charStart, String charEnd, Integer lineNumber, String detail, String kind) { this.method = method; @@ -126,5 +131,5 @@ public int hashCode() { public String toString() { return id + ": " + detail; } - + } diff --git a/src/main/java/com/swarm/graphql/model/Invocation.java b/src/main/java/com/swarm/graphql/model/Invocation.java index 379b551..9feb327 100644 --- a/src/main/java/com/swarm/graphql/model/Invocation.java +++ b/src/main/java/com/swarm/graphql/model/Invocation.java @@ -2,11 +2,18 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Transient; + @Entity public class Invocation { - + @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @@ -26,8 +33,7 @@ public class Invocation { @Transient private boolean isVirtual; - public Invocation() { - } + public Invocation () {} public Invocation(Method invoking, Method invoked, Session session, boolean isVirtual) { this.invoking = invoking; @@ -95,5 +101,5 @@ public int hashCode() { public String toString() { return invoking.getId() + ": " + invoking.getKey() + " -> " + invoked.getId() + ": " + invoked.getKey(); } - + } diff --git a/src/main/java/com/swarm/graphql/model/Method.java b/src/main/java/com/swarm/graphql/model/Method.java index a55a32a..37751a3 100644 --- a/src/main/java/com/swarm/graphql/model/Method.java +++ b/src/main/java/com/swarm/graphql/model/Method.java @@ -2,11 +2,17 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + @Entity public class Method { - + @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @@ -26,8 +32,7 @@ public class Method { @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) private Calendar timestamp; - public Method() { - } + public Method () {} public Method(Type type, String key, String name, String signature) { this.type = type; @@ -95,5 +100,5 @@ public int hashCode() { public String toString() { return type.getFullName() +"." + this.name; } - + } diff --git a/src/main/java/com/swarm/graphql/model/Namespace.java b/src/main/java/com/swarm/graphql/model/Namespace.java index a5cea5d..ca4c16e 100644 --- a/src/main/java/com/swarm/graphql/model/Namespace.java +++ b/src/main/java/com/swarm/graphql/model/Namespace.java @@ -2,39 +2,63 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + @Entity public class Namespace { @Id @GeneratedValue(strategy=GenerationType.AUTO) - private Long id; - + private Long id; + @Column(nullable = false) String name; - + @Column(nullable = false) String fullPath; @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) private Calendar timestamp; - public Namespace() { - } + public Namespace() {} public Namespace(String name, String fullPath) { this.name = name; this.fullPath = fullPath; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Namespace namespace = (Namespace) o; + + return id.equals(namespace.id); + } + + @Override + public int hashCode() { + return id.hashCode(); + } + + @Override + public String toString() { + return id + ": " + name; + } + public Long getId() { return id; } public void setId(Long id) { this.id = id; - } + } public String getName() { return name; @@ -51,25 +75,5 @@ public String getFullPath() { public void setFullPath(String fullPath) { this.fullPath = fullPath; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Namespace namespace = (Namespace) o; - - return id.equals(namespace.id); - } - - @Override - public int hashCode() { - return id.hashCode(); - } - - @Override - public String toString() { - return id + ": " + name; - } } diff --git a/src/main/java/com/swarm/graphql/model/Product.java b/src/main/java/com/swarm/graphql/model/Product.java index b812bbc..8666348 100644 --- a/src/main/java/com/swarm/graphql/model/Product.java +++ b/src/main/java/com/swarm/graphql/model/Product.java @@ -2,40 +2,45 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +import com.swarm.graphql.model.Product; @Entity public class Product { @Id - @GeneratedValue(strategy=GenerationType.AUTO) - private Long id; + @GeneratedValue(strategy=GenerationType.AUTO) + private Long id; @Column(nullable = false) String name; @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) private Calendar timestamp; - - public Product() { - } - + public Product(String name) { this.name = name; } + public Product() {} + public Long getId() { return id; } - + public void setId(Long id) { this.id = id; } - + public String getName() { return name; } - + public void setName(String name) { this.name = name; } @@ -59,5 +64,4 @@ public int hashCode() { public String toString() { return id + ": " + name; } - } diff --git a/src/main/java/com/swarm/graphql/model/Session.java b/src/main/java/com/swarm/graphql/model/Session.java index 42cc508..2bee53f 100644 --- a/src/main/java/com/swarm/graphql/model/Session.java +++ b/src/main/java/com/swarm/graphql/model/Session.java @@ -3,11 +3,19 @@ import java.util.Calendar; import java.util.Date; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + @Entity public class Session { - + @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @@ -35,8 +43,7 @@ public class Session { @Temporal(TemporalType.TIMESTAMP) private Date finished; - public Session() { - } + public Session () {} public Session(Developer developer, Task task, String description, String label, String purpose, String project, Date started, Date finished) { this.developer = developer; @@ -140,5 +147,5 @@ public int hashCode() { public String toString() { return id + ": " + description; } - + } diff --git a/src/main/java/com/swarm/graphql/model/Task.java b/src/main/java/com/swarm/graphql/model/Task.java index fae1b22..31d9ff9 100644 --- a/src/main/java/com/swarm/graphql/model/Task.java +++ b/src/main/java/com/swarm/graphql/model/Task.java @@ -2,7 +2,13 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + @Entity public class Task { @@ -23,8 +29,7 @@ public class Task { @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) private Calendar timestamp; - public Task() { - } + public Task () {} public Task(Product product, String title, String url, String color) { this.product = product; @@ -32,7 +37,7 @@ public Task(Product product, String title, String url, String color) { this.url = url; this.color = color; } - + public Long getId() { return id; } @@ -41,6 +46,14 @@ public void setId(Long id) { this.id = id; } + public Product getProduct() { + return product; + } + + public void setProduct(Product product) { + this.product = product; + } + public String getTitle() { return title; } @@ -56,7 +69,7 @@ public String getUrl() { public void setUrl(String url) { this.url = url; } - + public String getColor() { return color; } @@ -65,14 +78,6 @@ public void setColor(String color) { this.color = color; } - public Product getProduct() { - return product; - } - - public void setProduct(Product product) { - this.product = product; - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/com/swarm/graphql/model/Type.java b/src/main/java/com/swarm/graphql/model/Type.java index 20b2173..b638e46 100644 --- a/src/main/java/com/swarm/graphql/model/Type.java +++ b/src/main/java/com/swarm/graphql/model/Type.java @@ -2,11 +2,17 @@ import java.util.Calendar; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + @Entity public class Type { - + @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @@ -26,22 +32,21 @@ public class Type { @Column(nullable = false) String name; - @Column(length = 1000000) - String source; - + @ManyToOne + private Artefact artefact; + @Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) private Calendar timestamp; - public Type() { - } + public Type () {} - public Type(Namespace namespace, Session session, String fullName, String fullPath, String name, String source) { + public Type(Namespace namespace, Session session, String fullName, String fullPath, String name, Artefact artefact) { this.namespace = namespace; this.session = session; this.fullName = fullName; this.fullPath = fullPath; this.name = name; - this.source = source; + this.artefact = artefact; } public Long getId() { @@ -92,12 +97,12 @@ public void setName(String name) { this.name = name; } - public String getSource() { - return source; + public Artefact getArtefact() { + return artefact; } - public void setSource(String source) { - this.source = source; + public void setArtefact(Artefact artefact) { + this.artefact = artefact; } @Override @@ -119,5 +124,5 @@ public int hashCode() { public String toString() { return id + ": " + fullName; } - + } diff --git a/src/main/java/com/swarm/graphql/query/Query.java b/src/main/java/com/swarm/graphql/query/Query.java deleted file mode 100644 index a676b29..0000000 --- a/src/main/java/com/swarm/graphql/query/Query.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.swarm.graphql.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; - -public class Query implements GraphQLQueryResolver { - - public String hello() { - return "hello"; - } -} diff --git a/src/main/java/com/swarm/graphql/query/QueryDeveloper.java b/src/main/java/com/swarm/graphql/query/QueryDeveloper.java deleted file mode 100644 index 2e7daaa..0000000 --- a/src/main/java/com/swarm/graphql/query/QueryDeveloper.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.swarm.graphql.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import com.swarm.graphql.repository.DeveloperRepository; -import com.swarm.graphql.repository.SessionRepository; - -public class QueryDeveloper implements GraphQLQueryResolver{ - - private DeveloperRepository developerRepository; - - public QueryDeveloper(DeveloperRepository developerRepository) { - this.developerRepository = developerRepository; - } - -} diff --git a/src/main/java/com/swarm/graphql/query/QueryEvent.java b/src/main/java/com/swarm/graphql/query/QueryEvent.java deleted file mode 100644 index 0c346f3..0000000 --- a/src/main/java/com/swarm/graphql/query/QueryEvent.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.swarm.graphql.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import com.swarm.graphql.repository.EventRepository; - -public class QueryEvent implements GraphQLQueryResolver{ - - private EventRepository eventRepository; - - public QueryEvent(EventRepository eventRepository) { - this.eventRepository = eventRepository; - } - - -} diff --git a/src/main/java/com/swarm/graphql/query/QueryInvocation.java b/src/main/java/com/swarm/graphql/query/QueryInvocation.java deleted file mode 100644 index f12dc5d..0000000 --- a/src/main/java/com/swarm/graphql/query/QueryInvocation.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.swarm.graphql.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.InvocationRepository; - -public class QueryInvocation implements GraphQLQueryResolver{ - - private InvocationRepository invocationRepository; - - public QueryInvocation(InvocationRepository invocationRepository) { - this.invocationRepository = invocationRepository; - } - - public Iterable invocationsByMethods(Long sessionId, Long invokingId, Long invokedId){ - return invocationRepository.findByMethods(sessionId, invokingId, invokedId); - } - -} diff --git a/src/main/java/com/swarm/graphql/query/QueryMethod.java b/src/main/java/com/swarm/graphql/query/QueryMethod.java deleted file mode 100644 index d418420..0000000 --- a/src/main/java/com/swarm/graphql/query/QueryMethod.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.swarm.graphql.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import com.swarm.graphql.model.Method; -import com.swarm.graphql.model.Session; -import com.swarm.graphql.repository.*; - -public class QueryMethod implements GraphQLQueryResolver { - - private MethodRepository methodRepository; - private SessionRepository sessionRepository; - - public QueryMethod(MethodRepository methodRepository, SessionRepository sessionRepository) { - this.methodRepository = methodRepository; - this.sessionRepository = sessionRepository; - } - - public Iterable methodsByTypeId(Long typeId){ - return methodRepository.findByTypeId(typeId); - } - - public Iterable startingMethodsBySessionId(Long sessionId){ - Session session = sessionRepository.findOne(sessionId); - return methodRepository.getStartingMethods(session); - } - - public Iterable endingMethodsBySessionId(Long sessionId){ - Session session = sessionRepository.findOne(sessionId); - return methodRepository.getEndingMethods(session); - } - -} diff --git a/src/main/java/com/swarm/graphql/query/QueryNamespace.java b/src/main/java/com/swarm/graphql/query/QueryNamespace.java deleted file mode 100644 index 182e7db..0000000 --- a/src/main/java/com/swarm/graphql/query/QueryNamespace.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.swarm.graphql.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import com.swarm.graphql.model.Namespace; -import com.swarm.graphql.repository.NamespaceRepository; - -public class QueryNamespace implements GraphQLQueryResolver{ - - private NamespaceRepository namespaceRepository; - - public QueryNamespace(NamespaceRepository namespaceRepository) { - this.namespaceRepository = namespaceRepository; - } - - public Namespace namespaceByFullPath(String fullPath){ - return namespaceRepository.findByFullPath(fullPath); - } - -} diff --git a/src/main/java/com/swarm/graphql/query/QueryType.java b/src/main/java/com/swarm/graphql/query/QueryType.java deleted file mode 100644 index 7c51156..0000000 --- a/src/main/java/com/swarm/graphql/query/QueryType.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.swarm.graphql.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.TypeRepository; - -public class QueryType implements GraphQLQueryResolver{ - - private TypeRepository typeRepository; - - public QueryType(TypeRepository typeRepository) { - this.typeRepository = typeRepository; - } - - public Iterable typesBySessionId(Long sessionId){ - return typeRepository.findBySessionId(sessionId); - } - -} diff --git a/src/main/java/com/swarm/graphql/repository/ArtefactRepository.java b/src/main/java/com/swarm/graphql/repository/ArtefactRepository.java new file mode 100644 index 0000000..eaa4b3b --- /dev/null +++ b/src/main/java/com/swarm/graphql/repository/ArtefactRepository.java @@ -0,0 +1,9 @@ +package com.swarm.graphql.repository; + +import org.springframework.data.repository.CrudRepository; + +import com.swarm.graphql.model.Artefact; + +public interface ArtefactRepository extends CrudRepository { + +} diff --git a/src/main/java/com/swarm/graphql/repository/BreakpointRepository.java b/src/main/java/com/swarm/graphql/repository/BreakpointRepository.java index 09bcaa4..be9fcbe 100644 --- a/src/main/java/com/swarm/graphql/repository/BreakpointRepository.java +++ b/src/main/java/com/swarm/graphql/repository/BreakpointRepository.java @@ -1,27 +1,27 @@ package com.swarm.graphql.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; -import com.swarm.graphql.model.Breakpoint; import com.swarm.graphql.model.*; public interface BreakpointRepository extends CrudRepository { - + @Query("Select b from Breakpoint b Where b.type = :type order by b.lineNumber") List findByType(@Param("type") Type type); @Query("Select b from Breakpoint b Where b.type.session.task = :task and b.type.fullName = :fullName order by b.lineNumber") - List findByTaskAndType(@Param("task") Task task, @Param("fullName") String fullName); + List findByTaskAndType(@Param("task") Optional task, @Param("fullName") String fullName); @Query("Select b from Breakpoint b Where b.type.fullName = :fullName order by b.lineNumber") List findByTypeFullName(@Param("fullName") String fullName); @Query("Select count(b) from Breakpoint b Where b.type.session.task = :task and b.type.fullName = :fullName") - int countByTaskAndType(@Param("task") Task task, @Param("fullName") String fullName); + int countByTaskAndType(@Param("task") Optional task, @Param("fullName") String fullName); int countByType(Type type); @@ -29,6 +29,5 @@ public interface BreakpointRepository extends CrudRepository { List findByTaskId(@Param("taskId") Long taskId); @Query("Select b from Breakpoint b Where b.type.session.task.product = :product order by b.lineNumber") - List findByProduct(@Param("product") Product product); - + List findByProduct(@Param("product") Optional product); } diff --git a/src/main/java/com/swarm/graphql/repository/DeveloperRepository.java b/src/main/java/com/swarm/graphql/repository/DeveloperRepository.java index 29bf2db..de9a6e3 100644 --- a/src/main/java/com/swarm/graphql/repository/DeveloperRepository.java +++ b/src/main/java/com/swarm/graphql/repository/DeveloperRepository.java @@ -8,10 +8,8 @@ import com.swarm.graphql.model.Developer; public interface DeveloperRepository extends CrudRepository { - - Developer findById(@Param("id") Long id); + Developer findByNameAllIgnoringCase(@Param("name") String name); Page findByName(@Param("name") String name, Pageable pageable); - } diff --git a/src/main/java/com/swarm/graphql/repository/InvocationRepository.java b/src/main/java/com/swarm/graphql/repository/InvocationRepository.java index a166e5b..bf05c52 100644 --- a/src/main/java/com/swarm/graphql/repository/InvocationRepository.java +++ b/src/main/java/com/swarm/graphql/repository/InvocationRepository.java @@ -1,32 +1,36 @@ package com.swarm.graphql.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import com.swarm.graphql.model.Invocation; -import com.swarm.graphql.model.*; +import com.swarm.graphql.model.Method; +import com.swarm.graphql.model.Product; +import com.swarm.graphql.model.Session; +import com.swarm.graphql.model.Task; public interface InvocationRepository extends CrudRepository { - + @Query("Select i from Invocation i Where i.session.id = :sessionId and i.invoking.id = :invokingId and i.invoked.id = :invokedId") List findByMethods(@Param("sessionId") Long sessionId, @Param("invokingId") Long invokingId, @Param("invokedId") Long invokedId); @Query("Select count(i) from Invocation i where i.session = :session and (i.invoking = :method or i.invoked = :method)") - int countInvocations(@Param("session") Session session, @Param("method") Method method); + int countInvocations(@Param("session") Optional session, @Param("method") Method method); @Query("from Invocation as i where i.session = :session order by i.id") - List findBySession(@Param("session") Session session); + List findBySession(@Param("session") Optional session); - int countBySession(Session session); + int countBySession(Optional session); @Query("from Invocation as i where i.session.task = :task order by i.id") List findBySession(@Param("task") Task task); @Query("from Invocation as i Where i.session.task.product = :product") - List findByProduct(@Param("product") Product product); - + List findByProduct(@Param("product") Optional product); + } diff --git a/src/main/java/com/swarm/graphql/repository/MethodRepository.java b/src/main/java/com/swarm/graphql/repository/MethodRepository.java index 5479d0e..f36c538 100644 --- a/src/main/java/com/swarm/graphql/repository/MethodRepository.java +++ b/src/main/java/com/swarm/graphql/repository/MethodRepository.java @@ -1,29 +1,32 @@ package com.swarm.graphql.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; -import com.swarm.graphql.model.*; +import com.swarm.graphql.model.Method; +import com.swarm.graphql.model.Session; +import com.swarm.graphql.model.Type; public interface MethodRepository extends CrudRepository { - + @Query("Select m From Method m Where m.type.id = :typeId") List findByTypeId(@Param("typeId") Long typeId); List findByType(@Param("type") Type type); @Query("Select count(m) From Method m Where m.type.session = :session") - int countBySession(@Param("session") Session session); + int countBySession(@Param("session") Optional session); @Query("select m from Method m, Type t, Session s where m.type = t and t.session = s and s = :session " + "and m not in (select i.invoked from Invocation i group by i.invoked) order by m.id") - List getStartingMethods(@Param("session") Session session); + List getStartingMethods(@Param("session") Optional session); @Query("select m from Method m, Type t, Session s where m.type = t and t.session = s and s = :session " + "and m not in (select i.invoking from Invocation i group by i.invoking) order by m.id") - List getEndingMethods(@Param("session") Session session); - + List getEndingMethods(@Param("session") Optional session); + } diff --git a/src/main/java/com/swarm/graphql/repository/NamespaceRepository.java b/src/main/java/com/swarm/graphql/repository/NamespaceRepository.java index f9c2aad..44b5d48 100644 --- a/src/main/java/com/swarm/graphql/repository/NamespaceRepository.java +++ b/src/main/java/com/swarm/graphql/repository/NamespaceRepository.java @@ -6,7 +6,7 @@ import com.swarm.graphql.model.Namespace; public interface NamespaceRepository extends CrudRepository { - + Namespace findByFullPath(@Param("fullPath") String fullPath); } diff --git a/src/main/java/com/swarm/graphql/repository/SessionRepository.java b/src/main/java/com/swarm/graphql/repository/SessionRepository.java index 5933c8b..43a9a1f 100644 --- a/src/main/java/com/swarm/graphql/repository/SessionRepository.java +++ b/src/main/java/com/swarm/graphql/repository/SessionRepository.java @@ -1,6 +1,7 @@ package com.swarm.graphql.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; @@ -9,11 +10,11 @@ import com.swarm.graphql.model.Session; public interface SessionRepository extends CrudRepository { - + @Query("Select s from Session s Where task.id = :taskId and developer.id = :developerId ") List findByTaskAndDeveloper(@Param("taskId") Long taskId, @Param("developerId") Long developerId); @Query("Select s from Session s Where task.id = :taskId") - List findByTask(@Param("taskId") Long taskId); - + List> findByTask(@Param("taskId") Long taskId); + } diff --git a/src/main/java/com/swarm/graphql/repository/TypeRepository.java b/src/main/java/com/swarm/graphql/repository/TypeRepository.java index e912577..56fe554 100644 --- a/src/main/java/com/swarm/graphql/repository/TypeRepository.java +++ b/src/main/java/com/swarm/graphql/repository/TypeRepository.java @@ -1,23 +1,28 @@ package com.swarm.graphql.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; -import com.swarm.graphql.model.*; +import com.swarm.graphql.model.Product; +import com.swarm.graphql.model.Session; +import com.swarm.graphql.model.Task; +import com.swarm.graphql.model.Type; + public interface TypeRepository extends CrudRepository { - + @Query("Select t from Type t Where t.session.id = :sessionId") List findBySessionId(@Param("sessionId") Long sessionId); - List findBySession(@Param("session") Session session); + List findBySession(@Param("session") Optional session); @Query("Select t from Type t Where t.session.task = :task order by t.fullName") - List findByTask(@Param("task") Task task); + List findByTask(@Param("task") Optional task); @Query("Select t.fullName from Type t Where t.session.task.product = :product group by fullName order by t.fullName") - List findFullNamesByProduct(@Param("product") Product product); - + List findFullNamesByProduct(@Param("product") Optional product); + } diff --git a/src/main/java/com/swarm/graphql/resolver/BreakpointResolver.java b/src/main/java/com/swarm/graphql/resolver/BreakpointResolver.java deleted file mode 100644 index 1cea797..0000000 --- a/src/main/java/com/swarm/graphql/resolver/BreakpointResolver.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.swarm.graphql.resolver; - -import com.coxautodev.graphql.tools.GraphQLResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.*; - -public class BreakpointResolver implements GraphQLResolver { - private TypeRepository typeRepository; - - public BreakpointResolver(TypeRepository typeRepository) { - this.typeRepository = typeRepository; - } - - public Type getType(Breakpoint breakpoint) { - return typeRepository.findOne(breakpoint.getType().getId()); - } - -} diff --git a/src/main/java/com/swarm/graphql/resolver/EventResolver.java b/src/main/java/com/swarm/graphql/resolver/EventResolver.java deleted file mode 100644 index edbc32c..0000000 --- a/src/main/java/com/swarm/graphql/resolver/EventResolver.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.swarm.graphql.resolver; - -import com.coxautodev.graphql.tools.GraphQLResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.*; - -public class EventResolver implements GraphQLResolver { - private SessionRepository sessionRepository; - private MethodRepository methodRepository; - - public EventResolver(SessionRepository sessionRepository, MethodRepository methodRepository) { - this.sessionRepository = sessionRepository; - this.methodRepository = methodRepository; - } - - public Session getSession(Event event) { - return sessionRepository.findOne(event.getSession().getId()); - } - - public Method getMethod(Event event) { - return methodRepository.findOne(event.getMethod().getId()); - } - -} diff --git a/src/main/java/com/swarm/graphql/resolver/InvocationResolver.java b/src/main/java/com/swarm/graphql/resolver/InvocationResolver.java deleted file mode 100644 index 60b5ea6..0000000 --- a/src/main/java/com/swarm/graphql/resolver/InvocationResolver.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.swarm.graphql.resolver; - -import com.coxautodev.graphql.tools.GraphQLResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.*; - -public class InvocationResolver implements GraphQLResolver { - private SessionRepository sessionRepository; - private MethodRepository methodRepository; - - public InvocationResolver(SessionRepository sessionRepository, MethodRepository methodRepository) { - this.sessionRepository = sessionRepository; - this.methodRepository = methodRepository; - } - - public Session getSession(Invocation invocation) { - return sessionRepository.findOne(invocation.getSession().getId()); - } - - public Method getMethodInvoked(Invocation invocation) { - return methodRepository.findOne(invocation.getInvoked().getId()); - } - - public Method getMethodInvoking(Invocation invocation) { - return methodRepository.findOne(invocation.getInvoking().getId()); - } - -} diff --git a/src/main/java/com/swarm/graphql/resolver/MethodResolver.java b/src/main/java/com/swarm/graphql/resolver/MethodResolver.java deleted file mode 100644 index 274516e..0000000 --- a/src/main/java/com/swarm/graphql/resolver/MethodResolver.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.swarm.graphql.resolver; - -import com.coxautodev.graphql.tools.GraphQLResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.*; - -public class MethodResolver implements GraphQLResolver { - private TypeRepository typeRepository; - - public MethodResolver(TypeRepository typeRepository) { - this.typeRepository = typeRepository; - } - - public Type getType(Method method) { - return typeRepository.findOne(method.getType().getId()); - } - -} diff --git a/src/main/java/com/swarm/graphql/resolver/SessionResolver.java b/src/main/java/com/swarm/graphql/resolver/SessionResolver.java deleted file mode 100644 index 34dfcfd..0000000 --- a/src/main/java/com/swarm/graphql/resolver/SessionResolver.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.swarm.graphql.resolver; - - -import com.coxautodev.graphql.tools.GraphQLResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.*; - -public class SessionResolver implements GraphQLResolver { - private DeveloperRepository developerRepository; - private TaskRepository taskRepository; - - public SessionResolver(DeveloperRepository developerRepository, TaskRepository taskRepository) { - this.developerRepository = developerRepository; - this.taskRepository = taskRepository; - } - - public Developer getDeveloper(Session session) { - return developerRepository.findOne(session.getDeveloper().getId()); - } - - public Task getTask(Session session) { - return taskRepository.findOne(session.getTask().getId()); - } -} diff --git a/src/main/java/com/swarm/graphql/resolver/TaskResolver.java b/src/main/java/com/swarm/graphql/resolver/TaskResolver.java deleted file mode 100644 index 0614e67..0000000 --- a/src/main/java/com/swarm/graphql/resolver/TaskResolver.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.swarm.graphql.resolver; - -import com.coxautodev.graphql.tools.GraphQLResolver; -import com.swarm.graphql.model.Product; -import com.swarm.graphql.model.Task; -import com.swarm.graphql.repository.ProductRepository; - -public class TaskResolver implements GraphQLResolver { - private ProductRepository productRepository; - - public TaskResolver(ProductRepository productRepository) { - this.productRepository = productRepository; - } - - public Product getProduct(Task task) { - return productRepository.findOne(task.getProduct().getId()); - } - -} diff --git a/src/main/java/com/swarm/graphql/resolver/TypeResolver.java b/src/main/java/com/swarm/graphql/resolver/TypeResolver.java deleted file mode 100644 index 3845a8a..0000000 --- a/src/main/java/com/swarm/graphql/resolver/TypeResolver.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.swarm.graphql.resolver; - -import com.coxautodev.graphql.tools.GraphQLResolver; -import com.swarm.graphql.model.*; -import com.swarm.graphql.repository.*; - -public class TypeResolver implements GraphQLResolver { - private NamespaceRepository namespaceRepository; - private SessionRepository sessionRepository; - - public TypeResolver(NamespaceRepository namespaceRepository, SessionRepository sessionRepository) { - this.namespaceRepository = namespaceRepository; - this.sessionRepository = sessionRepository; - } - - public Namespace getNamespace(Type type) { - return namespaceRepository.findOne(type.getNamespace().getId()); - } - - public Session getSession(Type type) { - return sessionRepository.findOne(type.getNamespace().getId()); - } - -} diff --git a/src/main/java/com/swarm/graphql/service/ArtefactService.java b/src/main/java/com/swarm/graphql/service/ArtefactService.java new file mode 100644 index 0000000..be98bac --- /dev/null +++ b/src/main/java/com/swarm/graphql/service/ArtefactService.java @@ -0,0 +1,33 @@ +package com.swarm.graphql.service; + +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.swarm.graphql.model.Artefact; +import com.swarm.graphql.repository.ArtefactRepository; + +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class ArtefactService { + + private ArtefactRepository artefactRepository; + + public ArtefactService(ArtefactRepository artefactRepository) { + this.artefactRepository = artefactRepository; + } + + @GraphQLQuery + public Iterable allArtefacts() { + return artefactRepository.findAll(); + } + + @GraphQLQuery + public Optional ArtefactById(Long artefactId) { + return artefactRepository.findById(artefactId); + } + +} diff --git a/src/main/java/com/swarm/graphql/query/QueryBreakpoint.java b/src/main/java/com/swarm/graphql/service/BreakpointService.java similarity index 71% rename from src/main/java/com/swarm/graphql/query/QueryBreakpoint.java rename to src/main/java/com/swarm/graphql/service/BreakpointService.java index 6a37753..ec177ee 100644 --- a/src/main/java/com/swarm/graphql/query/QueryBreakpoint.java +++ b/src/main/java/com/swarm/graphql/service/BreakpointService.java @@ -1,34 +1,43 @@ -package com.swarm.graphql.query; +package com.swarm.graphql.service; import java.util.List; +import java.util.Optional; + +import org.springframework.stereotype.Service; -import com.coxautodev.graphql.tools.GraphQLQueryResolver; import com.swarm.graphql.model.Breakpoint; import com.swarm.graphql.model.Product; import com.swarm.graphql.repository.BreakpointRepository; import com.swarm.graphql.repository.ProductRepository; -public class QueryBreakpoint implements GraphQLQueryResolver{ +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; +@Service +@GraphQLApi +public class BreakpointService { + private BreakpointRepository breakpointRepository; private ProductRepository productRepository; - public QueryBreakpoint(BreakpointRepository breakpointRepository, ProductRepository productRepository) { - this.breakpointRepository = breakpointRepository; - this.productRepository = productRepository; + public BreakpointService(BreakpointRepository breakpointRepo, ProductRepository productRepo) { + this.breakpointRepository = breakpointRepo; + this.productRepository = productRepo; } - + @GraphQLQuery public Iterable allBreakpoints() { return breakpointRepository.findAll(); } + @GraphQLQuery public Iterable breakpointsByTaskId(Long taskId){ return breakpointRepository.findByTaskId(taskId); } + @GraphQLQuery(name = "getTable") public String getTable(Long productId) { - Product product = productRepository.findOne(productId); + Optional product = productRepository.findById(productId); List breakpoints = breakpointRepository.findByProduct(product); StringBuffer buffer = new StringBuffer("{"); diff --git a/src/main/java/com/swarm/graphql/service/DeveloperService.java b/src/main/java/com/swarm/graphql/service/DeveloperService.java new file mode 100644 index 0000000..0a2566c --- /dev/null +++ b/src/main/java/com/swarm/graphql/service/DeveloperService.java @@ -0,0 +1,26 @@ +package com.swarm.graphql.service; + +import org.springframework.stereotype.Service; + +import com.swarm.graphql.model.Developer; +import com.swarm.graphql.repository.DeveloperRepository; + +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class DeveloperService { + + private DeveloperRepository developerRepo; + + public DeveloperService(DeveloperRepository developerRepo) { + this.developerRepo = developerRepo; + } + + @GraphQLQuery + public Iterable allDevelopers() { + return developerRepo.findAll(); + } + +} diff --git a/src/main/java/com/swarm/graphql/service/EventService.java b/src/main/java/com/swarm/graphql/service/EventService.java new file mode 100644 index 0000000..b5f5bb6 --- /dev/null +++ b/src/main/java/com/swarm/graphql/service/EventService.java @@ -0,0 +1,19 @@ +package com.swarm.graphql.service; + +import org.springframework.stereotype.Service; + +import com.swarm.graphql.repository.EventRepository; + +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class EventService { + + private EventRepository eventRepository; + + public EventService(EventRepository eventRepository) { + this.eventRepository = eventRepository; + } + +} diff --git a/src/main/java/com/swarm/graphql/service/InvocationService.java b/src/main/java/com/swarm/graphql/service/InvocationService.java new file mode 100644 index 0000000..f15dd63 --- /dev/null +++ b/src/main/java/com/swarm/graphql/service/InvocationService.java @@ -0,0 +1,26 @@ +package com.swarm.graphql.service; + +import org.springframework.stereotype.Service; + +import com.swarm.graphql.model.Invocation; +import com.swarm.graphql.repository.InvocationRepository; + +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class InvocationService { + + private InvocationRepository invocationRepository; + + public InvocationService(InvocationRepository invocationRepository) { + this.invocationRepository = invocationRepository; + } + + @GraphQLQuery + public Iterable invocationsByMethods(Long sessionId, Long invokingId, Long invokedId){ + return invocationRepository.findByMethods(sessionId, invokingId, invokedId); + } + +} diff --git a/src/main/java/com/swarm/graphql/service/MethodService.java b/src/main/java/com/swarm/graphql/service/MethodService.java new file mode 100644 index 0000000..a61d4b2 --- /dev/null +++ b/src/main/java/com/swarm/graphql/service/MethodService.java @@ -0,0 +1,44 @@ +package com.swarm.graphql.service; + +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.swarm.graphql.model.Method; +import com.swarm.graphql.model.Session; +import com.swarm.graphql.repository.MethodRepository; +import com.swarm.graphql.repository.SessionRepository; + +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class MethodService { + + private MethodRepository methodRepository; + private SessionRepository sessionRepository; + + public MethodService(MethodRepository methodRepository, SessionRepository sessionRepository) { + this.methodRepository = methodRepository; + this.sessionRepository = sessionRepository; + } + + @GraphQLQuery + public Iterable methodsByTypeId(Long typeId){ + return methodRepository.findByTypeId(typeId); + } + + @GraphQLQuery + public Iterable startingMethodsBySessionId(Long sessionId){ + Optional session = sessionRepository.findById(sessionId); + return methodRepository.getStartingMethods(session); + } + + @GraphQLQuery + public Iterable endingMethodsBySessionId(Long sessionId){ + Optional session = sessionRepository.findById(sessionId); + return methodRepository.getEndingMethods(session); + } + +} diff --git a/src/main/java/com/swarm/graphql/service/NamespaceService.java b/src/main/java/com/swarm/graphql/service/NamespaceService.java new file mode 100644 index 0000000..9c15c9a --- /dev/null +++ b/src/main/java/com/swarm/graphql/service/NamespaceService.java @@ -0,0 +1,26 @@ +package com.swarm.graphql.service; + +import org.springframework.stereotype.Service; + +import com.swarm.graphql.model.Namespace; +import com.swarm.graphql.repository.NamespaceRepository; + +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class NamespaceService { + + private NamespaceRepository namespaceRepo; + + public NamespaceService(NamespaceRepository namespaceRepo) { + this.namespaceRepo = namespaceRepo; + } + + @GraphQLQuery + public Namespace namespaceByFullPath(String fullPath){ + return namespaceRepo.findByFullPath(fullPath); + } + +} diff --git a/src/main/java/com/swarm/graphql/query/QueryProduct.java b/src/main/java/com/swarm/graphql/service/ProductService.java similarity index 88% rename from src/main/java/com/swarm/graphql/query/QueryProduct.java rename to src/main/java/com/swarm/graphql/service/ProductService.java index 8302725..46702fa 100644 --- a/src/main/java/com/swarm/graphql/query/QueryProduct.java +++ b/src/main/java/com/swarm/graphql/service/ProductService.java @@ -1,34 +1,40 @@ -package com.swarm.graphql.query; +package com.swarm.graphql.service; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; + +import org.springframework.stereotype.Service; -import com.coxautodev.graphql.tools.GraphQLQueryResolver; import com.swarm.graphql.model.Invocation; import com.swarm.graphql.model.Product; import com.swarm.graphql.repository.InvocationRepository; import com.swarm.graphql.repository.ProductRepository; import com.swarm.graphql.repository.TypeRepository; -public class QueryProduct implements GraphQLQueryResolver{ +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class ProductService { private ProductRepository productRepository; private InvocationRepository invocationRepository; private TypeRepository typeRepository; - - public QueryProduct(ProductRepository productRepository,InvocationRepository invocationRepository,TypeRepository typeRepository) { - + public ProductService(ProductRepository productRepository, InvocationRepository invocationRepository, TypeRepository typeRepository) { this.productRepository = productRepository; this.invocationRepository = invocationRepository; this.typeRepository = typeRepository; } + @GraphQLQuery(name = "getProductPaths") public String getProductPaths(Long productId) { StringBuffer graph = new StringBuffer("["); - Product product = productRepository.findOne(productId); + Optional product = productRepository.findById(productId); if(product != null) { List invocations = invocationRepository.findByProduct(product); diff --git a/src/main/java/com/swarm/graphql/query/QuerySession.java b/src/main/java/com/swarm/graphql/service/SessionService.java similarity index 87% rename from src/main/java/com/swarm/graphql/query/QuerySession.java rename to src/main/java/com/swarm/graphql/service/SessionService.java index c345808..950324f 100644 --- a/src/main/java/com/swarm/graphql/query/QuerySession.java +++ b/src/main/java/com/swarm/graphql/service/SessionService.java @@ -1,11 +1,13 @@ -package com.swarm.graphql.query; +package com.swarm.graphql.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; + +import org.springframework.stereotype.Service; -import com.coxautodev.graphql.tools.GraphQLQueryResolver; import com.swarm.graphql.model.Invocation; import com.swarm.graphql.model.Method; import com.swarm.graphql.model.Session; @@ -15,7 +17,12 @@ import com.swarm.graphql.repository.SessionRepository; import com.swarm.graphql.repository.TypeRepository; -public class QuerySession implements GraphQLQueryResolver{ +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class SessionService { private SessionRepository sessionRepository; private TypeRepository typeRepository; @@ -23,24 +30,26 @@ public class QuerySession implements GraphQLQueryResolver{ private InvocationRepository invocationRepository; private StringBuffer graph; - public QuerySession(SessionRepository sessionRepository, TypeRepository typeRepository, MethodRepository methodRepository, InvocationRepository invocationRepository) { + public SessionService(SessionRepository sessionRepository, TypeRepository typeRepository, MethodRepository methodRepository, InvocationRepository invocationRepository) { this.sessionRepository = sessionRepository; this.typeRepository = typeRepository; this.methodRepository = methodRepository; this.invocationRepository = invocationRepository; } - public Iterable sessionsByTaskIdAndDeveloperId(Long taskId, Long developerId){ + @GraphQLQuery + public Iterable sessionsByTaskIdAndDeveloperId(Long taskId, Long developerId){ return sessionRepository.findByTaskAndDeveloper(taskId, developerId); } + @GraphQLQuery(name = "getGraphData") public String getGraphData(Long sessionId, boolean addType) { - Session session = sessionRepository.findOne(sessionId); + Optional session = sessionRepository.findById(sessionId); return getGraphData(session, addType, true); } - public String getGraphData(Session session, boolean addType, boolean closed) { + public String getGraphData(Optional session, boolean addType, boolean closed) { graph = new StringBuffer(); if(closed) { graph.append("["); @@ -56,9 +65,9 @@ public String getGraphData(Session session, boolean addType, boolean closed) { output = graph.toString() + (closed ? "]" : ""); } return output; -} + } - private void graphAddSession(Session session, boolean addType, boolean closed){ + private void graphAddSession(Optional session, boolean addType, boolean closed){ List types = typeRepository.findBySession(session); for (Type type : types) { int hash = type.getFullName().hashCode(); @@ -69,9 +78,8 @@ private void graphAddSession(Session session, boolean addType, boolean closed){ graphAddSessionAddMethod(type,addType,newType,session,r,g,b); } } - - private void graphAddSessionAddMethod(Type type, boolean addType, boolean newType, Session session, int r, int g, int b) { + private void graphAddSessionAddMethod(Type type, boolean addType, boolean newType, Optional session, int r, int g, int b) { List methods = methodRepository.findByType(type); for(Method method : methods) { int invocations = invocationRepository.countInvocations(session, method); @@ -96,7 +104,7 @@ private void graphAddSessionAddType(Type type) { graph.append("\"data\": { \"id\": \"T" + type.getId() + "\", \"label\": \"" + type.getFullName() + "\", \"shape\": \"roundrectangle\", \"color\": \"#888\"}},"); } - private void graphAddInvocation(Session session) { + private void graphAddInvocation(Optional session) { List invocations = invocationRepository.findBySession(session); if(invocations.size() > 0) { Map labels = new HashMap(); @@ -111,7 +119,6 @@ private void graphAddInvocation(Session session) { } } - private Map graphAddInvocationAddString(Invocation invocation, Map labels) { String key = invocation.getInvoking().getId() + "->" + invocation.getInvoked().getId(); if(labels.containsKey(key)) { @@ -128,9 +135,10 @@ private Map graphAddInvocationAddString(Invocation invocation, M return labels; } + @GraphQLQuery(name = "getStackData") public String getStackData(Long sessionId) { StringBuffer graph = new StringBuffer(); - Session session = sessionRepository.findOne(sessionId); + Optional session = sessionRepository.findById(sessionId); List startingMethods = methodRepository.getStartingMethods(session); List endingMethods = methodRepository.getEndingMethods(session); @@ -192,10 +200,10 @@ private String addNode(int path, Method method, boolean isVirtual) { return buffer.toString(); } - + @GraphQLQuery(name = "getInterPathEdges") public String getInterPathEdges(Long sessionId) { StringBuffer graph = new StringBuffer(); - Session session = sessionRepository.findOne(sessionId); + Optional session = sessionRepository.findById(sessionId); List startingMethods = methodRepository.getStartingMethods(session); List endingMethods = methodRepository.getEndingMethods(session); @@ -247,7 +255,7 @@ public String getInterPathEdges(Long sessionId) { } } - List> getInvocationPaths(List startingMethods, List endingMethods, Session session) { + List> getInvocationPaths(List startingMethods, List endingMethods, Optional session) { List> paths = new ArrayList>(); List uniqueInvocations = new ArrayList(); @@ -308,23 +316,25 @@ List> getInvocationPaths(List startingMethods, List session = sessionRepository.findById(sessionId); int invocations = invocationRepository.countBySession(session); int methods = methodRepository.countBySession(session); return invocations + methods; } + @GraphQLQuery(name = "getGraphDataByTaskId") public String getGraphDataByTaskId(Long taskId) { String graph = "["; - List sessions = sessionRepository.findByTask(taskId); - for (Session session : sessions) { + List> sessions = sessionRepository.findByTask(taskId); + for (Optional session : sessions) { graph += getGraphData(session, false, false); } return graph + "]"; } - + } diff --git a/src/main/java/com/swarm/graphql/query/QueryTask.java b/src/main/java/com/swarm/graphql/service/TaskService.java similarity index 88% rename from src/main/java/com/swarm/graphql/query/QueryTask.java rename to src/main/java/com/swarm/graphql/service/TaskService.java index a3b0ae9..5082fe7 100644 --- a/src/main/java/com/swarm/graphql/query/QueryTask.java +++ b/src/main/java/com/swarm/graphql/service/TaskService.java @@ -1,13 +1,13 @@ -package com.swarm.graphql.query; +package com.swarm.graphql.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.Map.Entry; -import com.coxautodev.graphql.tools.GraphQLQueryResolver; +import org.springframework.stereotype.Service; + import com.swarm.graphql.model.Breakpoint; import com.swarm.graphql.model.Task; import com.swarm.graphql.model.Type; @@ -15,28 +15,38 @@ import com.swarm.graphql.repository.TaskRepository; import com.swarm.graphql.repository.TypeRepository; -public class QueryTask implements GraphQLQueryResolver{ - +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +import java.util.Map.Entry; +import java.util.Optional; + +@Service +@GraphQLApi +public class TaskService { + private TaskRepository taskRepository; private TypeRepository typeRepository; private BreakpointRepository breakpointRepository; - public QueryTask(TaskRepository taskRepository, TypeRepository typeRepository, BreakpointRepository breakpointRepository) { + public TaskService(TaskRepository taskRepository, TypeRepository typeRepository, BreakpointRepository breakpointRepository) { this.taskRepository = taskRepository; this.typeRepository = typeRepository; this.breakpointRepository = breakpointRepository; } + @GraphQLQuery public Iterable allTasks() { return taskRepository.findAll(); } + @GraphQLQuery(name = "getBreakpointGraphData") public String getBreakpointGraphData(Long taskId) { return getBreakpointGraphData(taskId, true); } public String getBreakpointGraphData(Long taskId, boolean closed) { - Task task = taskRepository.findOne(taskId); + Optional task = taskRepository.findById(taskId); if (task == null) { return "[]"; } @@ -138,5 +148,4 @@ private List sortNodes(Map typeNodes) { return nodes; } - } diff --git a/src/main/java/com/swarm/graphql/service/TypeService.java b/src/main/java/com/swarm/graphql/service/TypeService.java new file mode 100644 index 0000000..c1ba9fc --- /dev/null +++ b/src/main/java/com/swarm/graphql/service/TypeService.java @@ -0,0 +1,26 @@ +package com.swarm.graphql.service; + +import org.springframework.stereotype.Service; + +import com.swarm.graphql.model.Type; +import com.swarm.graphql.repository.TypeRepository; + +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotation.GraphQLApi; + +@GraphQLApi +@Service +public class TypeService { + + private TypeRepository typeRepository; + + public TypeService(TypeRepository typeRepository) { + this.typeRepository = typeRepository; + } + + @GraphQLQuery + public Iterable typesBySessionId(Long sessionId){ + return typeRepository.findBySessionId(sessionId); + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 36600a2..29e8c10 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,5 @@ +server.port=8080 +graphql.spqr.gui.enabled=true +graphql.spqr.relay.connection-check-relaxed=true spring.h2.console.enabled=true -spring.h2.console.path=/h2-console +spring.h2.console.path=/h2-console \ No newline at end of file diff --git a/src/main/resources/graphql/breakpoint.graphqls b/src/main/resources/graphql/breakpoint.graphqls deleted file mode 100644 index a191779..0000000 --- a/src/main/resources/graphql/breakpoint.graphqls +++ /dev/null @@ -1,13 +0,0 @@ -type Breakpoint { - id: ID! - type: Type! - charStart: String! - charEnd: String! - lineNumber: Int! -} - -extend type Query { - allBreakpoints: [Breakpoint] - breakpointsByTaskId(taskId: ID!): [Breakpoint] - getTable(productId: ID!): String -} \ No newline at end of file diff --git a/src/main/resources/graphql/developer.graphqls b/src/main/resources/graphql/developer.graphqls deleted file mode 100644 index 11873e5..0000000 --- a/src/main/resources/graphql/developer.graphqls +++ /dev/null @@ -1,5 +0,0 @@ -type Developer { - id: ID! - name: String! - color: String -} \ No newline at end of file diff --git a/src/main/resources/graphql/event.graphqls b/src/main/resources/graphql/event.graphqls deleted file mode 100644 index 0019c9e..0000000 --- a/src/main/resources/graphql/event.graphqls +++ /dev/null @@ -1,10 +0,0 @@ -type Event { - id: ID! - method: Method! - session: Session! - charStart: String - charEnd: String - lineNumber: Int - detail: String - kind: String -} \ No newline at end of file diff --git a/src/main/resources/graphql/invocation.graphqls b/src/main/resources/graphql/invocation.graphqls deleted file mode 100644 index 35a183a..0000000 --- a/src/main/resources/graphql/invocation.graphqls +++ /dev/null @@ -1,10 +0,0 @@ -type Invocation { - id: ID! - invoking: Method! - invoked: Method! - session: Session! -} - -extend type Query { - invocationsByMethods(sessionId: ID!, invokingId: ID!, invokedId: ID!): [Invocation] -} \ No newline at end of file diff --git a/src/main/resources/graphql/method.graphqls b/src/main/resources/graphql/method.graphqls deleted file mode 100644 index 585ef9a..0000000 --- a/src/main/resources/graphql/method.graphqls +++ /dev/null @@ -1,14 +0,0 @@ -type Method { - id: ID! - type: Type! - key: String! - name: String! - signature: String! -} - -extend type Query { - methodsByTypeId(typeId: ID!): [Method] - startingMethodsBySessionId(sessionId: ID!): [Method] - endingMethodsBySessionId(sessionId: ID!): [Method] -} - diff --git a/src/main/resources/graphql/namespace.graphqls b/src/main/resources/graphql/namespace.graphqls deleted file mode 100644 index 5f330ce..0000000 --- a/src/main/resources/graphql/namespace.graphqls +++ /dev/null @@ -1,9 +0,0 @@ -type Namespace { - id: ID! - name: String! - fullPath: String! -} - -extend type Query { - namespaceByFullPath(fullPath: String!): Namespace -} \ No newline at end of file diff --git a/src/main/resources/graphql/product.graphqls b/src/main/resources/graphql/product.graphqls deleted file mode 100644 index a4839fe..0000000 --- a/src/main/resources/graphql/product.graphqls +++ /dev/null @@ -1,8 +0,0 @@ -type Product { - id: ID! - name: String! -} - -extend type Query { - getProductPaths(productId: ID!): String -} \ No newline at end of file diff --git a/src/main/resources/graphql/session.graphqls b/src/main/resources/graphql/session.graphqls deleted file mode 100644 index bfe58a1..0000000 --- a/src/main/resources/graphql/session.graphqls +++ /dev/null @@ -1,21 +0,0 @@ -scalar Date - -type Session { - id: ID! - developer: Developer! - task: Task! - description: String - label: String - purpose: String - project: String - started: Date - finished: Date -} - -extend type Query { - sessionsByTaskIdAndDeveloperId(taskId: ID!, developerId: ID!): [Session] - getGraphData(sessionId: ID!, addType: Boolean!): String - getStackData(sessionId: ID!): String - getInterPathEdges(sessionId: ID!): String - countElements(sessionId: ID!): Int -} diff --git a/src/main/resources/graphql/swarmdbg.graphqls b/src/main/resources/graphql/swarmdbg.graphqls deleted file mode 100644 index 86d2e1e..0000000 --- a/src/main/resources/graphql/swarmdbg.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Query{ - hello: String -} \ No newline at end of file diff --git a/src/main/resources/graphql/task.graphqls b/src/main/resources/graphql/task.graphqls deleted file mode 100644 index 610ae8b..0000000 --- a/src/main/resources/graphql/task.graphqls +++ /dev/null @@ -1,13 +0,0 @@ -type Task { - id: ID! - product: Product! - title: String - url: String - color: String -} - -extend type Query { - allTasks: [Task] - getGraphDataByTaskId(taskId: ID!): String - getBreakpointGraphData(taskId: ID!): String -} \ No newline at end of file diff --git a/src/main/resources/graphql/type.graphqls b/src/main/resources/graphql/type.graphqls deleted file mode 100644 index e8f9048..0000000 --- a/src/main/resources/graphql/type.graphqls +++ /dev/null @@ -1,14 +0,0 @@ -type Type { - id: ID! - namespace: Namespace! - session: Session! - fullName: String! - fullPath: String! - name: String! - source: String! -} - -extend type Query { - typesBySessionId(sessionId: ID!): [Type] -} - diff --git a/src/test/java/com/swarm/graphql/ScalarDateTest.java b/src/test/java/com/swarm/graphql/ScalarDateTest.java index 47f393d..c04ff6b 100644 --- a/src/test/java/com/swarm/graphql/ScalarDateTest.java +++ b/src/test/java/com/swarm/graphql/ScalarDateTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql; +/*package com.swarm.graphql; import static org.assertj.core.api.Assertions.*; @@ -26,3 +26,4 @@ public void parseValue() { } } +*/ \ No newline at end of file diff --git a/src/test/java/com/swarm/graphql/SwarmGraphQlApplicationTest.java b/src/test/java/com/swarm/graphql/SwarmGraphQlApplicationTest.java index 803187c..e8a0ed7 100644 --- a/src/test/java/com/swarm/graphql/SwarmGraphQlApplicationTest.java +++ b/src/test/java/com/swarm/graphql/SwarmGraphQlApplicationTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql; +/*package com.swarm.graphql; import org.junit.Test; import org.junit.runner.RunWith; @@ -14,3 +14,4 @@ public class SwarmGraphQlApplicationTest { public void contextLoads() { } } +*/ \ No newline at end of file diff --git a/src/test/java/com/swarm/graphql/query/AllTests.java b/src/test/java/com/swarm/graphql/query/AllTests.java index 9e14b2c..722f8fc 100644 --- a/src/test/java/com/swarm/graphql/query/AllTests.java +++ b/src/test/java/com/swarm/graphql/query/AllTests.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import org.junit.runner.RunWith; import org.junit.runners.Suite; @@ -16,4 +16,4 @@ QueryTest.class, QueryTypeTest.class }) public class AllTests { -} +}*/ diff --git a/src/test/java/com/swarm/graphql/query/QueryBreakpointTest.java b/src/test/java/com/swarm/graphql/query/QueryBreakpointTest.java index 03c3afc..ce7a9f4 100644 --- a/src/test/java/com/swarm/graphql/query/QueryBreakpointTest.java +++ b/src/test/java/com/swarm/graphql/query/QueryBreakpointTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -24,7 +24,7 @@ public final void lancement() { new SwarmGraphQlApplication().main(new String[0]); } */ - @Test + /*@Test public final void testAllBreakpoints() throws IOException, JSONException { System.out.println("testAllBreakpoints"); @@ -48,3 +48,4 @@ public final void testAllBreakpoints() throws IOException, JSONException { } } +*/ \ No newline at end of file diff --git a/src/test/java/com/swarm/graphql/query/QueryInvocationTest.java b/src/test/java/com/swarm/graphql/query/QueryInvocationTest.java index 10c0348..6c0d778 100644 --- a/src/test/java/com/swarm/graphql/query/QueryInvocationTest.java +++ b/src/test/java/com/swarm/graphql/query/QueryInvocationTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.*; @@ -23,7 +23,7 @@ public final void lancement() { SwarmGraphQlApplication.main(new String[0]); } */ - @Test + /*@Test public final void testInvocationsByMethods() throws IOException, JSONException { System.out.println("testInvocationsByMethods"); JSONObject json = JsonReader.readJsonFromUrl("http://localhost:8080/graphql?query=%7BinvocationsByMethods(sessionId:1,invokingId:1,invokedId:2)%7Bid%7D%7D"); @@ -36,4 +36,4 @@ public final void testInvocationsByMethods() throws IOException, JSONException { assertEquals(expectedIdResult,id); } -} +}*/ diff --git a/src/test/java/com/swarm/graphql/query/QueryMethodTest.java b/src/test/java/com/swarm/graphql/query/QueryMethodTest.java index 2c20927..50ec4ba 100644 --- a/src/test/java/com/swarm/graphql/query/QueryMethodTest.java +++ b/src/test/java/com/swarm/graphql/query/QueryMethodTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.*; @@ -21,7 +21,7 @@ public final void lancement() { SwarmGraphQlApplication.main(new String[0]); } */ - @Test + /*@Test public final void testMethodsByTypeId() throws IOException, JSONException { System.out.println("testMethodsByTypeId"); JSONObject json = JsonReader.readJsonFromUrl("http://localhost:8080/graphql?query=%7BmethodsByTypeId(typeId:1)%7Bid%7D%7D"); @@ -63,4 +63,4 @@ public final void testEndingMethodsBySessionId() throws IOException, JSONExcepti -} +}*/ diff --git a/src/test/java/com/swarm/graphql/query/QueryNamespaceTest.java b/src/test/java/com/swarm/graphql/query/QueryNamespaceTest.java index b0aaeed..6820521 100644 --- a/src/test/java/com/swarm/graphql/query/QueryNamespaceTest.java +++ b/src/test/java/com/swarm/graphql/query/QueryNamespaceTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.*; @@ -23,7 +23,7 @@ public final void lancement() { SwarmGraphQlApplication.main(new String[0]); } */ - @Test + /*@Test public final void testNamespaceByFullPath() throws IOException, JSONException { System.out.println("testNamespaceByFullPath"); JSONObject json = JsonReader.readJsonFromUrl("http://localhost:8080/graphql?query=%7BnamespaceByFullPath(fullPath:%22namespace1.fullPath%22)%7Bid%7D%7D"); @@ -36,4 +36,4 @@ public final void testNamespaceByFullPath() throws IOException, JSONException { assertEquals(expectedIdResult,id); } -} +}*/ diff --git a/src/test/java/com/swarm/graphql/query/QuerySessionTest.java b/src/test/java/com/swarm/graphql/query/QuerySessionTest.java index 9b72171..5fc93cf 100644 --- a/src/test/java/com/swarm/graphql/query/QuerySessionTest.java +++ b/src/test/java/com/swarm/graphql/query/QuerySessionTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.*; @@ -21,7 +21,7 @@ public final void lancement() { SwarmGraphQlApplication.main(new String[0]); } */ - @Test + /*@Test public final void testSessionsByTaskIdAndDeveloperId() throws IOException, JSONException { System.out.println("testSessionsByTaskIdAndDeveloperId"); @@ -95,4 +95,4 @@ public final void testGetInterPathEdges() throws IOException, JSONException { assertEquals(expectedIdResult,result); } -} +}*/ diff --git a/src/test/java/com/swarm/graphql/query/QueryTaskTest.java b/src/test/java/com/swarm/graphql/query/QueryTaskTest.java index f92781d..6133f60 100644 --- a/src/test/java/com/swarm/graphql/query/QueryTaskTest.java +++ b/src/test/java/com/swarm/graphql/query/QueryTaskTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.*; @@ -14,7 +14,7 @@ public class QueryTaskTest { - @Test + /*@Test public final void allTaskTest() throws IOException, JSONException { System.out.println("allTaskTest"); @@ -38,4 +38,4 @@ public final void getBreakpointGraphDataTest() throws IOException, JSONException assertEquals(corect,data.toString()); } -} +}*/ diff --git a/src/test/java/com/swarm/graphql/query/QueryTest.java b/src/test/java/com/swarm/graphql/query/QueryTest.java index 73174c4..4f9348f 100644 --- a/src/test/java/com/swarm/graphql/query/QueryTest.java +++ b/src/test/java/com/swarm/graphql/query/QueryTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -26,4 +26,4 @@ public final void testHello() throws Exception { } -} +}*/ diff --git a/src/test/java/com/swarm/graphql/query/QueryTypeTest.java b/src/test/java/com/swarm/graphql/query/QueryTypeTest.java index ee741d3..c57843d 100644 --- a/src/test/java/com/swarm/graphql/query/QueryTypeTest.java +++ b/src/test/java/com/swarm/graphql/query/QueryTypeTest.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import static org.junit.Assert.*; @@ -30,3 +30,4 @@ public final void typesBySessionIdtest() throws IOException, JSONException { } } +*/ \ No newline at end of file diff --git a/src/test/java/com/swarm/graphql/query/TestRunner.java b/src/test/java/com/swarm/graphql/query/TestRunner.java index 06d36ba..87f31a0 100644 --- a/src/test/java/com/swarm/graphql/query/TestRunner.java +++ b/src/test/java/com/swarm/graphql/query/TestRunner.java @@ -1,4 +1,4 @@ -package com.swarm.graphql.query; +/*package com.swarm.graphql.query; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; @@ -21,3 +21,4 @@ public static void main(String[] args) throws InterruptedException { } } +*/ \ No newline at end of file diff --git a/target/classes/application.properties b/target/classes/application.properties index 36600a2..29e8c10 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,2 +1,5 @@ +server.port=8080 +graphql.spqr.gui.enabled=true +graphql.spqr.relay.connection-check-relaxed=true spring.h2.console.enabled=true -spring.h2.console.path=/h2-console +spring.h2.console.path=/h2-console \ No newline at end of file diff --git a/target/classes/com/swarm/graphql/MainConfig.class b/target/classes/com/swarm/graphql/MainConfig.class index edd5f04b9227e43de84f9f1695c0350ba2c1935e..bd8ec0f4f001158536a2ae0202bd1352971414a7 100644 GIT binary patch literal 9029 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 literal 14526 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 L;sUAxsRRN5Uq~Dq diff --git a/target/classes/com/swarm/graphql/SwarmGraphQlApplication.class b/target/classes/com/swarm/graphql/SwarmGraphQlApplication.class index e732648e08cfdd0ae782c74fd6c5348d8779ed3e..965731622ba25d341e4ac5d3d161f949a9d5b086 100644 GIT binary patch delta 111 zcmcb``khta)W2Q(7#J8#7-ZQQm>3x}Coa^SX!%7bNy8^Au`E$PCowNw-#I6-xOlPy zV}YQ6Z)!Qi?$uNV738 JGRQD6004yu8)N_g delta 83 zcmey)dW%)y)W2Q(7#J8#7-ZNPm>3x}Coa^SX!%7rS;HqQu`E$PCowNw-#;lUHMwN6 lJ!8S-LyXrM87I$TvK3`wkO1mqVvuBz0@7>@j11BY3;;yz6%POa diff --git a/target/classes/com/swarm/graphql/model/Breakpoint.class b/target/classes/com/swarm/graphql/model/Breakpoint.class index 8d6b30164a600cbedabd20fcfa0c455339425721..7816b1d4233948f8c0967c7750b85f3dfc24ded9 100644 GIT binary patch delta 879 zcmZ9KK~EDw6vzLw+wE@Gwa_+nF{TDmLE5Sff+DS;s30Ik5J6EvS11KUNU-s!HxGJq zE_%|7o_Y`?CDFuqFdqB>Ui}8fFChA#1$(f`n>U?(zxV$0=54tz8|`n~A3g!-#L9-< ztw-t$#q#3X{Ft}y-7A)h>-Xi0KufU8!AW$>FM;N^5CrlL3Xi>|kgG(5b zPmO&2WdSYMqz? zMjDzNF}oUC5I`$JID|0T5JL+4ke1KQ{G$#=M*`SO7p28%E=?%y(2(T*A-ztYN@w1{ z2vjm(5l&ZeB13x(L$72$Lln~QkvmMQ;#7sfI_s&F0j@`3B8x_}BY_TT0Gf6ZqOFrs z)GviI=wsCc9GvAp4d-}jKsUpJ47Y+2N*CKGBYR>73k_7{A8Y@d#Ve^SLbZjf(mcov zsu2f1Vt9HBBT8Krh3I${6Wq6RU&Yj0Mrgj!owoJ(;+!3_mh~E@rDw&Wx&OoaRF{uj z#|CQl87KoJXmtvWj*JRdA!k+t%6(kK#KP++UeH?DzdiZm?w>oNy` JZQ;kez+deGgd_j} delta 821 zcmZ9KOHUI~7>3`&bUN*H+8DH4B5evYU|S$4P!S3h6trlIN)@H`LcLYcKw^j+7u~y) z zOvKdYL$&!xe)0_ailA;8nRm8V^o%f5!R+;99nKCHE$HLbgQ%P_I)#uWV=Nrw zb2t3xK?pXE!a*l`QlY%b{x3)! zPGEp79Fz-z_5fSyYR54lzxy3=QhD?=CL!d$-_}P-rd%?}#EN8*D(Jcy0+c_10tVfKL&W#kl$v>n%n7C_7u1V1B?9pI(xo^ z6WodMJ&-`0r#cd37O9WGLV-^$WH~lyMo3k_KY~}){$bwLM19Gs8|$Wu)tG8y1SQvR zHK3+ns2`#!$dXoq=pKs8b=+2I*Knt`T*CvdPjOwtB4-SN*DS(JkXBz%s|&yO}nir zl<@;OH(vgyJS|mUwnRQTy;5D|=9o>bFw#MFIq}VgmCD(2@9kJ)MZQG;|0}L1x zQZ?6hJ%t0}o*$Uamcp?JwH;V?p=8?Hshb{E50;i@r>pae3s0-dj1m zFj1Ya%q~}_D-XwJX75k0l&fQSp{sXuFMuW&+fj z!r4AfR6W!2E$sv(Gk9Cf-ch(bxi1rq?Zlwvb5LUynE|{HqNK-u$INk{m zzY9c$5UdcXgA9eYKP|r;XM~Yj6GlY?qd3E~QEK}wIk_engZg>fwCPlrk*KkX*)@s# zw1Iml#pZ0&r|{7($|boh4q+A#(zvfM+}(%bAoj`RsxzX7Ge_=GK@%eIZa^_8@HMWnTo*{Mx`nTxT;ayKS$g?_1JL!#nfs zsyLz0ZxYOMkOeP`7-u?V2BeUXD&r~5(_1`cxJ$B!G!DYxfz1&=ALM?Rzawjug!Bs6 z1difZEHD}hByq^cah&jR5~oD;bR^H(iRHxJ+aWYt9p{K~o~I|=h122O8;s@ho0!N= zZQ|1F(8y)3BS>;R&vlFx$7%ioCV4X!sUeFTPXvfL%a@Q$AkW(a30@0`3_eZ(u41*o zU2#u|)m>Xc5x5xQ8<9YauP}uxyy;f{6<2?uLIOfGQoh_*`CYsh`+J9bLZrpltGlL$ z!rMIaG8H16h@^Jh8;mn1PNg^>xG7x2^*)>?dN~#Pa=L-{X+s?9;xy6A={k+w*oRY8 zCNU=ow895{IbG`Ibh9s~oBcU;ltUD!B01gOhm#~V`3p2udAgsBlIp)~M^EidiSmBkBLDU@Co$ASAjuO%V20mrOBq%F$ zU?9zZzL?frNQ>h!4%Id8(heE1yoH6{Xf1U_E3?xk98t0U9Ic4{x!>{V$r~(3Fx8RI ix3I?V32s~Xs<$p4cc7k&Q4@GdoCLlJ=auxC3H%GXEz>yw literal 2476 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 PL+!H0|KJQU{}J#HE-jPI diff --git a/target/classes/com/swarm/graphql/model/Invocation.class b/target/classes/com/swarm/graphql/model/Invocation.class index 442ad2582f6a44c4e4b28e95433b9649f2c07ce4..9b74ad12a4c3218d695afe82a55ae5a985858f2e 100644 GIT binary patch delta 949 zcmZ8fOHUI~7(KV`Oxtm+rHGUSD%kRBMH0}WRFQ{*l&1v+1eF0w5rHaH5?8ETy7B%3 z7w%X{z>-K}T)1-K#+57G^Ak+ebEgRCOz!J^=gj%;eBamLUYYUv*ZU6uE@FMlm~D4tk>#Pzj+b^7>Lhm!tj{*7J6)qpbZ8wGme2dn))wpD>WE%Uk zD;X2F&?`e)uV)AoChlTPX0?dxzCfuQ)Jy#arciBQ8Z&NK0-;wTbjqapB^8)6k;c5- z*Ao5(0Y_`40v8qdSjP3H>S-*SSiz)#o=NBW($773BH*fQXtSBCChlQUzSMt)8X@=s zT67nYEp8mB;jG(WMEZ>qtqM^% zZ%q(VeyvEzZ=Q&V+o@m0HKrc)hP7746O>f^rK?m0eG+oU8xd_b{klzmO?oHkUADsy z@1cXbnLs-_%iBvKUmaC3KJ@rUogjN+WG0KwzcZh0mx_yU9r-%sElbl(Ob7RNcbq7RIqqYNfbZN{z3rmMomd zs5&9@z6o5na23<)m5h1j1;VOmglkO9A#P#;MK2cB4{6tQqenY$TeyQIwI};)O9HOG zh<4uB&SjN1y5b91vG5SH0!C?RV{GY#4{HLRNOI62*DcIoR=qX;M7tsQ05Y+S*cLY~ z9N}v63pB%n7M1eX%Qhq+)UG#OAEB=eenb(3jXK28h`4I?^(O>a9mQ;(OdZI6L~r>( z)^KvQYsq99nSFSW$#gm+(eVkr{}<5-iKJThhXWG&yuc~+DbpVl$DPvpF~HLDep~jC z>?PSO1+rw`kjXgApu_wmGe9QmsD*d|t#%qis>_UtA%{GJ9M#rMTMm;P(WEMy1{GUy zR(&Hk>TtstAtwX294A-MT+KPOI*J@BWAlNgbiSj4{5weZX2(~ELW0fcC@_cARL*bEofP|f@AE@6e$U}H>iu&zsj#b-AhVc(^A!`Rogp< zqx4v$03X_U7~FHSzUz c${ETWPQ7?2b#6bk3y&S@32(?5GxY}W7r>&26951J diff --git a/target/classes/com/swarm/graphql/model/Method.class b/target/classes/com/swarm/graphql/model/Method.class index e27c6cb92951f3c2ed59078f605bcd30ab5a3d4c..6adc56a172d8f094731ce66eccb51f64d359652f 100644 GIT binary patch delta 929 zcmZ9K+fEZv6o&uZ>2#*UKuQfQ#3Ev$+9Dz+5o$qDP!8p&Rs@t$Y5_~DwQ}K&FJMf} z_7%L63yE5cCdLb|d;s6U8=rs}|Cu&GoMa#J&-&J3uk|LlA2fdc{qhY!51#BAUZvKT zOc&SlYqM6t+DaGGg{QJsX%@X7x|M+NTr+VU<8sCw4oxDdVM?H8)7rK=vQ{qBF_q6{ zOkBmNeB~YuOyZ`Ac`OL%#r#6Cu#wAXxGjIXL*6@B*03ZHdhM&1KH=^*v4Vs^RVG~= zdzQ^kGqizwur#a+_zokK-I%zK2XaO2ZAc+)q6tGfG6Le9ffP1OY~qo8r^fXZwoKeY zLjFIAU0?>UC-p&cG!jT3=l&+=#%7)2N|#3{f;7CJS18 zxRXq+8`V7gTmh~imp~V~xi|BE80jN=-cvXlsojp$egS<{ZR0_nE}ouP+b8rK=4Ci) zCscIFgb|eIb&t=EtqMwZyo>0UalJ+KI;jsJ&eWglVYQ$C2W%uz&Ey3tke#r=B|gRv zLJ0>N#1J9H8&-!2jX02>)gC~0g#woeCA}?T)PaT_=p~_XLK6-YI11TMA}~Ve7onsB zU2&i~BdpF5nkUrguOwD}Jq`_1v5e4*v9=P%-a=J&+P*_1V|>H2TqR8G(6Qn)&Cm9L zoz>XydMu(5OK7EXlK;VGMc6p|i((oxOr{YgW~sR_M^%NQ)g06~O-0yq%AF1IvytUN z(e2PB+}M%JRmZpWic?_^RM`}h3@3;;e?@AM*3l9cKjZEm*8C4kSf|p?qlE1LLy&f| VHOp|tu?so6av{&E%47K$_y=D+iRAzQ delta 786 zcmYk4-%?Uh6vn>|>~ju>6Js=jPM{HJ1QHq$76@iSrf8)`nf=2eQW2bnx~%C5n%cfV z7hUCrPDM@4FkN@sWAqA))7l58x;T69+55M?wbr*z$Ft+<`FZfI4IqJS6&8j8;pct( zq2CrUY#n5Yj|HonDFp+UF(cM&0q-n|D&`oR8|CNaSgl;I#)^%4)xaf8i+8rXdlt(E zu49owYc`gePuJ^J6*oo4=2cd(s^Yd7;Qp~Y$S^pnm1f~tt+r6!s_3|f2P*C}^!!uq zh8rkjO>FaIe+iEa3?i%HF#|iJql700*0CYlJgt>bGjIbL!ITb*ivz{&&|#t8e6Uep zZ?s-9s@fP6Nj24bg6{mV<0PC2;247F$B=lXro#+lI15IvK#X=qI}d+Ce2)$m0s+Om z3`xmo66X%#EWOHfN;vWv@%_Jaw}=sNL`6>XafTGeMNJE`QK`Vs;{urYpapn>m?SYC z#}O(^rcNXC)*fWzCOCmCfjN7CX9%2-pma+4BZ|YSI%OI3gU~81mR3uPH7VZ0k`(^m zi~lR!HM?3%9=F?iUvxx+*PH=_*QF3!8gl({bGA SKh&^bi=r&3Q{ml-Hh@2(AcEHb diff --git a/target/classes/com/swarm/graphql/model/Namespace.class b/target/classes/com/swarm/graphql/model/Namespace.class index 053f77997afb216ca4900b2b046dae7c70067ea5..ead9870e598c765c0c188ced27dbcfc7db2d25a8 100644 GIT binary patch delta 743 zcmZ8eO>a_B5Iy(4_wEDoisjK3qku&$Qa*eYsja1js;#1e(&87(mq@BcTR~#t%B4Tx z#>9mhH}0Bf6U9Um<5o@F`2+k3{R76i4|LJRotex%XXebz&(L!_@cqxHF93>Y?F2eJ zG+J->Zg1UcxLx;tyVveMlre2e5{HgM@M97|B;+sS=tP=OevT1xHa!NKg21oL=v+42NA?X2Z9DrFte$xf zCr7W3>`c0BzHwb zJ`rMcIH%!tSffKx2l-Nj*s^z&bu?+u-$c?_A=)a@V*e=W7z|g3l$04_RgZGbqpX`r eqehgv>XfqSlK*$AF354+vp47_B$PgH0)GL|a&ZCx delta 750 zcmZ9J%}*0i6vfY-&YKw~V~rIoNT;+=Vmoau@};zhRg@`OM8wa;O%qMk7>K5E>(-Tt zyp1b&x{-xMohF(X*CzT8xN+g%VZ3iTkl=m8MV2lHm?%OdAX(?-qMFHAJ-f#p(5YvKSrmxXyX2a*M+;o6AdH$w|NAT z&@m`qiXkHTPLvKD<@GT7kU|`;{3DKegggo?kYc*BC-o8D`#mWm)X%WYz-kHQ2wq?V zWnp;5Pw@UX&T)$4$ng1*9)&DMdBwcSH#9oV9sD+Plvm1P0w+Ln#2OPNCd$&cTtS#* zreo!3B4nmQ<^wa+%*@DNmTQvAm~Uo{)U(-QfY~@KF MxxsCyNC`KAe{4%`7XSbN diff --git a/target/classes/com/swarm/graphql/model/Product.class b/target/classes/com/swarm/graphql/model/Product.class index e2e7bd99447ca90e8f5f09b3b45fe51962f2c792..2d03b6967f11f343727e106d08c5b0270be24027 100644 GIT binary patch delta 974 zcmZuv%Wl&^6g^|dNotuSbdge;C#8_sO#-10`k>GjN`a;nijY`FY7{__pfqAhKEmGs zs~}McT!~7E6$?IrKVZp@72=F-noxN$b7$_{d+s^+juZbC*T4Vy`~|=ab`SI;VV9L; zULdsI-fQSkkv1@njDT7wJ|2NU&cG?e>>uLM=|rv3ecImJsdwrx8{I}{-`-a8qG-QT z_QO>JS1@D$R3=k%xEjH{K}3xqOhKM|j9P%R2w?&vNZ}lBNxlI(CUKrto+ynPr+C%`FW`mhxliz1p%wDUJVa`M z9Cn=<7t!zne8ir>1ze=-|Ll(_d?1X+%gfFOWDA(E7$uWeXeHOMX?;RrP+NDsQ_xsw zpeX#WJ`?yPOZbvBVhBv56hJC_l2kE}RGCc-AT`u#k5ma-59I(>l2kyS`5S!PH?(qC zMbml*E!4NZA!a(bY;nDXruMC`5H*u+oaS;c+h?%qPI;8`1*(Yf_nkp+7HQ186mlNo z@u-Vfz#^NFhJhuHU%@gHHK>u;akCca5%OdD&8pJM`A21G2iIlU;UO*$^(!hXwOjyx yNgrU7;SwNogtaG!xar~C8olG-9?w}C2iqsdusQ^r@dYT@af?5oQrS;|hrnO^t7ee^ delta 950 zcmZva%}x_x6o#K~rhnA2HN;xbwiJufc8bLUq7+d;Dr)gRBraSu(KH&YFb>P>{QL#=o~jJ7P+p7Y_(n3Fe{3r^V>|uqb!rw z%bG=v+s>X@J#|N6EM)cLJ^fgBP6R5EW$s(tq~xpxx*f$iDQQNeDcOU?9a7tJFv!Rn zl^sqKAiE^4EE8^Z_!vEI->} l)y26ryx!xkoO81E*f?tVq7OFX!5Td1lRuR5bPpAe;2&~)X4L=y diff --git a/target/classes/com/swarm/graphql/model/Session.class b/target/classes/com/swarm/graphql/model/Session.class index 6b5d3baeca8d6939336c4596b0df636773c4f840..df514a88da8e0027ec740c0d579ea21f6abbbd15 100644 GIT binary patch delta 1170 zcmZ9LNl#Nz6vzL!<+V^sC1sKYlPv-*lc0z|jHn7ednFu8SXvzcg~AE+wPxFUjQ7%+Lo;* zt}?kbpbt&>+kMl%@qiwfo)OT30lnET;4Ca^8S%~f%Eo-5U|GvVC|H{SfyQlroWo@C z+Y!JmW8UJj3}M8IVdJ$W#q7gPW5?2%IfQ9DCNL=wuTOO8)5D>l6}JU4j91o-12*U= zmdm^y3%Fy{S!CnIpVlaKm{DAL<$?u#4+Tc3i&t=FRJ>978a8Q&t)xy?QgRMWv`Xib)Fx_+$NK>d`*qut z^%OMJ8$WFsM#yGKmbGZS0xE%KoHrJ1ZgEz%b^$GH?W4`5HSvElk*t62vUGt~Tr^CH zZqcIL+t5z;`b3x3PWKL#VI^@dgX~P81D(cGBHaq z6m&&Ffh3nUNoYzz>9J6xr>p2U-VxFjbPd)RM;CW2g>}XgM?yKYv*lFa=J_P;(0(7^| delta 921 zcmZ9K%TH557{$+&-d<>LTjgOTf;?J8Td;tyh|xp@1mqzgA_z)Bth`#vQ&2&~g^6J` z3wFkhI}#yCNiZ?4T(EX)O#BawD>ue717SfXcV_b4-<`n^&B>7=_v&b4HCGZ_cIu zP!jzgV5F>tzCttw`B)|Vl6btv_ejyvNM`_m1(;aGaV#Mh%krbwmp_aVs^!AMD1%_b z7%2lOrbk@?(<^^_Ge#&iuB7%-w)gyRm>=+%ieV~~QpQ!NgmPBdsUxlao&1c+u5C;! lS4qsI&nNMm`-@zXSUeo66&XL0m9fNgHoT%)#)&G+z<+pVq9y>DWvU7i$*>wg%Vl?1q20w2nq-ms9*)Zut-G~NUYtN=+ccb zG4mI&&{Y?ZXf>LsalyikTX*s|xN&2QXI|^a;^xkrcYpVuH#0w?-(t?^UvJ+7=)?N1 z^V1g&WeTM`TWjN^pRMKcyZ;W*{V{EDxGvS{IViHqoipyzSurQDG=2IE@1 zsl~inls$G1w}QBY)9R`GB)V1BAG7=rG#Xd=KvXuP13vY{KM-w&i39>@Lp|EzB8h|O zP+$E+jmKCWHc`hEVni4&L*O`i)VAeDdUv?>kp`;0Q@Z!j6X>TJr#iyy(_d5RSLog4 zs#@)MY8NEB)ib*xCOuxylY*k2F@TeLhMEh6MUQ9s6b5PeK_DUfSu@~)bu=wd1GQ0s zA^!8W)g}f#Xjpqt`&L4Z5E|8xYO(#H8WQr5Q4ev|upJg-#2O3@ZP*DpL1>at(;q+| zg20&?ut#9pn=|Ik`A%e($ef<@$VK>{x$4RBe);QhHhIWwFn6ZXFCfiwdJpxf3eKe& z&moO+`XfXp^%A{D7!{l^v)J&?I>H+R7GPl!2YBmESmN!0ZM}xP#Uyv=LMJkqrG+L0 zF-OsddFm2|RsZ+UGE{_qYAWlvl7kk?>VtD=#;&yy`Vp}r&bldf5X{Z*kXwF@CGD<) j<;e94R=B49l?qmOSn>a(SXEz~sJrH=1)8otmfOH@eL{j6 delta 788 zcmZ9KOHUI~7>3_7(=#)zlUg9PRN7K{Au^TJ4j{G_6cD8d3f3x!R_ldEqa`uKrNlqr z=InIE0#{u?q9xIU7!zHXxX>SH|?#>%#UVwP_QlaYn3ol93Y5>X>El->W^UW$)J- z_3YeQqi$jnQ{tItDqKR@!~zx>jPA+f%SFj=?ycoE~ zpcLZr^18gdA?n;VD!6IlB1Xj~f0q~nqYvQLF8X$8qaaDMk5=FyJm?Wmv@m1hxi%V% z(m4h%df`VLUFbs?3GqWKS`0^!BcV81W&cXPguP7{ZAs1XlP0;~;4ns9c${9PE6vKh zg8hF01K_Yk%^TXsA?+ECQrxRXiVaE~ehhgqv1KHAj!4@f1L$zb0+GLn9C65^L*~6n zo+q+EWRx=;C+4X)#l{?F%waweGeOLxqt@lBjpKy)qNmujL!QJ0`RyRTB_d}fDHaTE zgUMdGnLVbwRLX3?%De#gG&3LIw^}%rp|J(7HZyO*<}IqxVHz#WGznIn>UUC|fpgGt z9^F_(6lJ97Cf*iA8vS%4Y0P1s+(ls$-H(Do2GmQax?dKH{uMVEn^xIoL;7psg7o!o zTb9IkUob~Mh0D*-tK?&EP+8u^<+j;U=hYUfw5L3(E!4KfXJ1b==EkGomZN%`;--d@ H{T<*BcLaOn diff --git a/target/classes/com/swarm/graphql/model/Type.class b/target/classes/com/swarm/graphql/model/Type.class index d245d894b98fd2e37e81ff808c1c694f3f8152aa..28663d7ab4eb3c9bda1dea6e4d584a32a1528d93 100644 GIT binary patch literal 3797 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 diff --git a/target/classes/com/swarm/graphql/repository/BreakpointRepository.class b/target/classes/com/swarm/graphql/repository/BreakpointRepository.class index 6d58b32ff5b79e9a2bf34e7b29ec732419d04f56..dad268af44be714658b336c624a093dc2cb862d5 100644 GIT binary patch delta 660 zcmdlZ)GWev>ff$?3=9k=32p5ixP8FOHzx985soAGV@ZLDnk;B zvmNtNLMjVV85t}ze6kYD67@?4x0j-i3_Ay zfyP+dfs}4Oz_f``R1=#*ptQJ{CpH;`5t}EnEMyc_!=`9*0;`BvJ~kPkcFD=UY#fYs zllL)MZ9c-L%E-tv`4zi%J%bQ16j*`2Wnf@oWDsT$VPIk41PU=Rh%#^kX>JBa1|A^h zEoKm7;0FqbGXZ%55D{?%Qvz%dCliA>P>lrGFi8d}xM9-hhRJ{pfJ+Kn>zPBff$?3=9k=40;>6w3tK%(=zi?oGL>Si?bc`QbH;VQW+VXCeD{;1`13r zU{YhuKyZ{dzhhd=$Y_iZ5!uYf+6xwuVhAJ0ipv97+nBvCpVe^ diff --git a/target/classes/com/swarm/graphql/repository/DeveloperRepository.class b/target/classes/com/swarm/graphql/repository/DeveloperRepository.class index 7911b65432cd91d5c5e0fedf82a8eaf68eab3aa6..38e8d073424c358c58a098d20d20c018c83d981f 100644 GIT binary patch delta 177 zcmdnTK82m@)W2Q(7#J8#7{n%WwN18U44Zg4QGz8eF*lWwLBKb)BqKj1Ah8I@ElDjZ z-aLhokCBt3ATd2PF)1f?@&cyK*-R{q4D1XX3``81Ky!E)85kM3fS9|Ofro(?D8kAJ sWH0~~@iFi-Ff#}Mg_sxw!HW5qkQFn4m2)zIlrso{l?j7M5vV3n0O>~>j{pDw delta 178 zcmbQjzK@;j)W2Q(7#J8#7{n)XwMlWLW#*+gReGi{GMH-kWF?j*>gOcprR)3TPu$zZ z%#@iju`hy^B`+~Ib#pu;ALHZ-rj6OmEQ}273>*xM44goNco=~UE+FPEX5azJ@G|gW kk>Ll*2rvjTFfj-L^)N9AgZ1(;A@uTt#YMoRC{&dg0HDblO8@`> diff --git a/target/classes/com/swarm/graphql/repository/InvocationRepository.class b/target/classes/com/swarm/graphql/repository/InvocationRepository.class index 138d4d1afeb0dd6304b82c4a57695b1144c7082e..0d006dcdd6581adefe261d956ea86dfdcfe4df6b 100644 GIT binary patch delta 622 zcmX>lutbRK)W2Q(7#J8#7<4ysEoQRvO)bgDPYFmYO3Y0yNi8a7WDrQsFU>3Q%qz=J zPAtjH&jSjXYxra(mL=+!mSpDW`xk&j6LTg%WKtE2!X{%g`5==bqa9GePJ1-6GGR z0CWY!EsCg8(hN#)laCQ}SQVyQ6>P8?&|RJ|U#g>P*TB%O3Dd3#4i_yjsSS0R F4ghApak2ma delta 426 zcmZ1?bV`8h)W2Q(7#J8#7_>KXEoKr<&M(a?@ysjBPfje!%+D)kWN?}6$STDVoLXEA zy4*PD7vyfQDFYp3cU?$jCf-4!dJL3nPOFgD3+N12@nE+zgBiJV4A_ z%pk_V4-^n*0`dePBH{?91W=bGgA@ZZ11C@s6N5CmZW*v{9!7)~aiA7i1~~=>uvU4P n)+`1EbiIlgdX<2Blo?cDdKgsEwWwieQ3tw81MD_Us2jBaI&?=8 diff --git a/target/classes/com/swarm/graphql/repository/MethodRepository.class b/target/classes/com/swarm/graphql/repository/MethodRepository.class index 10b457e3f2b2336bd1eddf7791664cfd01a27f7f..277a2a839e4bf0c06ef309bcbe9595b8c6ba71fa 100644 GIT binary patch delta 425 zcmcc5`-+e2)W2Q(7#J8#7*scMePt9B@J%hr$WIAKEK1BxElDjZp8S__y@9xfPgY`C zqJC*fW{$ppK}lwQUSf{5rY9qV6*d{0$&O5tlYN;v80{vXV@k1C!=}hu6Uj`U%;FMj zMuu!`3Xx2kc+YI}0cJfWMwZF%S+(mKgn%w*Wn>U!U|?Zn5M~fzU}oS13NbN=GVlXw z9!3U61_2=EEoKmdDHa1O7H5!PV1X)@WZ(uW<_4UT2m{UHWMU8mQbG(2EQ|~y z45ADy44gnd6N4B7H<0FLU}WF{V%}l~aRz>%01qROCjb!<1e?Ih2sVL|>}FbDy? z#LCDZ$iTqD$RNxh!obYH2^3;t5M|&8(mad|j0^%m%v;PL22(5sRxA!w%rbc~t9CR@ oTna2M4HAbMBE!H9G=v+dp9f-wEQYCaFx_%sYvsYD0#v^u0B^EV!vFvP delta 302 zcmbQoGnt3$)W2Q(7#J8#7?d}1{bm&6P0P$najFbXEiTT?&tqgT)|mKFa&iL`hp47c zR$^JAerZW&j=oQ3afvk}LoiHo;sfK!dzr+U41fYsl8MFH)>u>rfFzlLk`wQnOtxjt zU;>*h8&H&=Qkq#}NVu`n_SF$gm-F>nH%&cqgm_Zb%LX1J2fqC)_R&7@xN18!~ff=e?mVq0noExZ;2clXIL%%%GR0Xiv Iicn2T0ErVrxBvhE diff --git a/target/test-classes/outils/JsonReader.class b/target/test-classes/outils/JsonReader.class index e18dd0fc7df8c4fdcc46b13c116f16552e338532..797dd07761e195ba00c8a64e1ead01a93c660f60 100644 GIT binary patch delta 511 zcmZ9JPfrt36vcmUrqjW3&=x}spe812gi@yp2(+N6fP(#ll%mDI15PT9w5E)1T^Zy0 zZB6te$c7S|;NHY9;1^)&7ck;&imk<9oFr^h(QFhZG|&7Nd&Zi`fqK(yvv#V%XTM zRWgICZN*iWaVGS8V^F2_jxnI7^bg}q{F=flt;{DU9A>y_b3^|&PMf!w)u+tqt_<^S z^i1z@y~$jYJGtRK?&e$M%E=~$bfhnmjwW_l z>Wh9!Tb;%Fh7>G6kr6)=2R#-|ua#I8=rX~59*E#9{Sv4w5iZcnny{vne3XYgBEpbp bdr*hsVc0yjr3hv7lz*3$gjV?S8m#{X->hml delta 550 zcmZ9IPfrt36vcmUX4;A4AW%~cCXkpI11)v1qSjVG5KwSvwWUb?KP^MkrcSXGp8`sNn@wr_gTI zf@)@BqsO>vbB*irgEldGLy7lUwWhPMx4rGR{H?t2ZTT&ejQpXE4bKQd#r5Sx%3_Xr zlUs67AJrGQEggNvPP5cow=77G%Q+(|-|J&wcwe;gYntPu}E#qWpEZ671}?RTSTQX;UDqtW_G#U038ORsUVRdUdgjQ;K!Cyw9}TB~|K@F2y4^ z518$+*x}CFSME^aB&A)7WvjC44@Pi`dqDIMxHaz5