From 5b823097be938e286263995383adb98add9a157b Mon Sep 17 00:00:00 2001
From: Tamas Bunth <tamas.bunth@collabora.co.uk>
Date: Mon, 5 Mar 2018 21:39:05 +0100
Subject: [PATCH] Fix swagger UI

---
 api.iml                                       | 41 ++++++++++---------
 pom.xml                                       | 33 +++++++++++++++
 readme.md                                     |  9 +++-
 src/main/kotlin/mobildata/ApiApplication.kt   | 15 +++++--
 .../kotlin/mobildata/web/SwaggerConfig.kt     | 15 ++++---
 5 files changed, 82 insertions(+), 31 deletions(-)

diff --git a/api.iml b/api.iml
index 357b9e2..5644b7c 100644
--- a/api.iml
+++ b/api.iml
@@ -59,16 +59,16 @@
     <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.10.0" level="project" />
     <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.10.0" level="project" />
     <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
     <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.19" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.0.4.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.13" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:2.7.7" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.2.13.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:2.7.8" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.2.14.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
     <orderEntry type="library" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" level="project" />
     <orderEntry type="library" name="Maven: org.javassist:javassist:3.22.0-GA" level="project" />
     <orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
@@ -76,13 +76,13 @@
     <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
     <orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.1.Final" level="project" />
     <orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-orm:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.0.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.0.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-orm:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.0.4.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.mindrot:jbcrypt:0.4" level="project" />
     <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.7.0" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.4" level="project" />
@@ -98,9 +98,9 @@
     <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.28" level="project" />
     <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.7.Final" level="project" />
     <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.0.4.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jre8:1.1.2" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.2" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-reflect:1.1.2" level="project" />
@@ -116,7 +116,7 @@
     <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.9.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.9.1" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.15.0" level="project" />
     <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.7.10" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.7.10" level="project" />
@@ -125,9 +125,9 @@
     <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.0.4.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.0.4.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.0.4.RELEASE" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.5.1" level="project" />
     <orderEntry type="library" name="Maven: org.postgresql:postgresql:9.4-1206-jdbc42" level="project" />
     <orderEntry type="library" name="Maven: com.netflix.feign:feign-core:8.18.0" level="project" />
@@ -150,5 +150,6 @@
     <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.1.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.6.1" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index fa711de..d42b505 100644
--- a/pom.xml
+++ b/pom.xml
@@ -90,6 +90,11 @@
 			<artifactId>springfox-swagger2</artifactId>
 			<version>2.7.0</version>
 		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.6.1</version>
+		</dependency>
 	</dependencies>
 
 	<build>
@@ -134,6 +139,34 @@
 					</dependency>
 				</dependencies>
 			</plugin>
+			<plugin>
+				<groupId>com.github.kongchen</groupId>
+				<artifactId>swagger-maven-plugin</artifactId>
+				<version>3.1.5</version>
+				<configuration>
+					<apiSources>
+						<apiSource>
+							<springmvc>true</springmvc>
+							<locations>com.sandy2friends.test.web.rest</locations>
+							<info>
+								<title>REST API</title>
+								<version>1</version>
+								<description>REST API</description>
+							</info>
+							<swaggerDirectory>swagger</swaggerDirectory>
+							<swaggerFileName>rest api</swaggerFileName>
+						</apiSource>
+					</apiSources>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>compile</phase>
+						<goals>
+							<goal>generate</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 
diff --git a/readme.md b/readme.md
index fb0a112..a7583dc 100644
--- a/readme.md
+++ b/readme.md
@@ -58,7 +58,12 @@ It uses PostgreSQL database.
 
 # Build and run
 
-You need Java and maven installed.
+Before running the server, a database has to be configured. With the current configuration, a PostgreSQL database
+is configured at the following url: `jdbc:postgresql://localhost:5432/mobildata`
+
+You need Java and maven installed. Build & run the server with the following command:
 
     mvn spring-boot:run
-    open http://localhost:8080
+
+For the first run, you may have to uncomment `spring.jpa.generate-ddl=true` and comment out `spring.jpa.hibernate.ddl-auto=create-drop`
+ 
diff --git a/src/main/kotlin/mobildata/ApiApplication.kt b/src/main/kotlin/mobildata/ApiApplication.kt
index ab1474d..448f139 100644
--- a/src/main/kotlin/mobildata/ApiApplication.kt
+++ b/src/main/kotlin/mobildata/ApiApplication.kt
@@ -17,6 +17,9 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess
 import org.springframework.web.servlet.config.annotation.*
 import com.fasterxml.jackson.annotation.JsonInclude
 import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
+
+
 
 
 
@@ -31,6 +34,13 @@ class ApiApplication : WebMvcConfigurer {
         registry!!.addInterceptor(exposeResponseInterceptor())
     }
 
+    override fun addResourceHandlers(registry: ResourceHandlerRegistry?) {
+        registry!!.addResourceHandler("swagger-ui.html")
+                .addResourceLocations("classpath:/META-INF/resources/")
+        registry.addResourceHandler("/webjars/**")
+                .addResourceLocations("classpath:/META-INF/resources/webjars/")
+    }
+
     override fun addCorsMappings(registry: CorsRegistry?) {
         registry!!.addMapping("/api/**")
                 .allowedOrigins("*")
@@ -46,9 +56,8 @@ class ApiApplication : WebMvcConfigurer {
         registry.addRedirectViewController("/documentation/configuration/ui", "/configuration/ui")
         registry.addRedirectViewController("/documentation/configuration/security", "/configuration/security")
         registry.addRedirectViewController("/documentation/swagger-resources", "/swagger-resources")
-        // no swagger-ui used
-        //registry.addRedirectViewController("/documentation", "/api/swagger-ui.html")
-        //registry.addRedirectViewController("/documentation/", "/api/swagger-ui.html")
+        registry.addRedirectViewController("/documentation", "/api/swagger-ui.html")
+        registry.addRedirectViewController("/documentation/", "/api/swagger-ui.html")
     }
 
     @Bean
diff --git a/src/main/kotlin/mobildata/web/SwaggerConfig.kt b/src/main/kotlin/mobildata/web/SwaggerConfig.kt
index 6787987..f7d1dad 100644
--- a/src/main/kotlin/mobildata/web/SwaggerConfig.kt
+++ b/src/main/kotlin/mobildata/web/SwaggerConfig.kt
@@ -7,12 +7,8 @@ import springfox.documentation.builders.RequestHandlerSelectors
 import springfox.documentation.spi.DocumentationType
 import springfox.documentation.spring.web.plugins.Docket
 import springfox.documentation.swagger2.annotations.EnableSwagger2
-import org.springframework.web.servlet.config.annotation.ViewControllerRegistry
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
-
-
-
-
+import springfox.documentation.builders.ApiInfoBuilder
+import springfox.documentation.service.ApiInfo
 
 
 @Configuration
@@ -27,4 +23,11 @@ class SwaggerConfig {
                 .build()
     }
 
+    @Bean
+    fun apiInfo(): ApiInfo {
+        val builder : ApiInfoBuilder  = ApiInfoBuilder();
+        builder.title("My Application API through Swagger UI").version("1.0").license("(C) Copyright Test")
+                .description("List of all the APIs of My Application App through Swagger UI");
+        return builder.build();
+    }
 }
\ No newline at end of file
-- 
GitLab