[Monitor Service | log4j]: SwaggerConfig.java: Updated swagger to add separate folders for libraries.

This commit is contained in:
Konstantina Galouni 2022-10-20 10:40:08 +03:00
parent 05aec3af4a
commit 5d46d84a96
1 changed files with 119 additions and 86 deletions

View File

@ -1,86 +1,119 @@
package eu.dnetlib.uoamonitorservice.configuration; package eu.dnetlib.uoamonitorservice.configuration;
import eu.dnetlib.uoamonitorservice.configuration.properties.APIProperties; import eu.dnetlib.uoamonitorservice.configuration.properties.APIProperties;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile; import org.springframework.context.annotation.Profile;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef; import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo; import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter; import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
* Swagger configuration class * Swagger configuration class
*/ */
@Configuration @Configuration
@Profile({"swagger"}) @Profile({"swagger"})
@EnableSwagger2 @EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurerAdapter { public class SwaggerConfig extends WebMvcConfigurerAdapter {
private final APIProperties apiProperties; private final APIProperties apiProperties;
@Autowired @Autowired
public SwaggerConfig(APIProperties apiProperties) { public SwaggerConfig(APIProperties apiProperties) {
this.apiProperties = apiProperties; this.apiProperties = apiProperties;
} }
@Bean @Bean
public Docket createRestApi() { public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2) return new Docket(DocumentationType.SWAGGER_2)
// .globalOperationParameters(globalParameterList()) // .globalOperationParameters(globalParameterList())
.apiInfo(apiInfo()) .apiInfo(apiInfo())
.select() .select()
.apis(RequestHandlerSelectors.any()) .apis(RequestHandlerSelectors.basePackage("eu.dnetlib.uoamonitorservice.controllers"))
.paths(PathSelectors.any()) .paths(PathSelectors.any())
.build(); .build();
} }
private ApiInfo apiInfo() { @Bean
return new ApiInfoBuilder() public Docket createRestApiLibrary() {
.title(this.apiProperties.getTitle()) return new Docket(DocumentationType.SWAGGER_2)
.description(this.apiProperties.getDescription()) .apiInfo(apiInfo())
.version(this.apiProperties.getVersion()) .groupName("Library")
.build(); .select()
} .apis(RequestHandlerSelectors.basePackage("eu.dnetlib.uoaadmintoolslibrary.controllers"))
.paths(PathSelectors.any())
private List<Parameter> globalParameterList() { .build();
Parameter authTokenHeader = new ParameterBuilder() }
.name("Session") // name of the header
.modelRef(new ModelRef("string")) // data-type of the header @Bean
.required(false) public Docket createRestApiAuthorizationLibrary() {
.parameterType("header") return new Docket(DocumentationType.SWAGGER_2)
.description("Session ID") .apiInfo(apiInfo())
.build(); .groupName("Authorization Library")
return Collections.singletonList(authTokenHeader); .select()
} .apis(RequestHandlerSelectors.basePackage("eu.dnetlib.uoaauthorizationlibrary.controllers"))
.paths(PathSelectors.any())
@Override .build();
public void addViewControllers(ViewControllerRegistry registry) { }
registry.addRedirectViewController("/v2/api-docs", "/v2/api-docs");
registry.addRedirectViewController("/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui"); @Bean
registry.addRedirectViewController("/swagger-resources/configuration/security", "/swagger-resources/configuration/security"); public Docket createRestApiNotificationLibrary() {
registry.addRedirectViewController("/swagger-resources", "/swagger-resources"); return new Docket(DocumentationType.SWAGGER_2)
} .apiInfo(apiInfo())
.groupName("Notification Service")
@Override .select()
public void addResourceHandlers(ResourceHandlerRegistry registry) { .apis(RequestHandlerSelectors.basePackage("eu.dnetlib.uoanotificationservice.controllers"))
registry.addResourceHandler("/swagger-ui.html**").addResourceLocations("classpath:/META-INF/resources/swagger-ui.html"); .paths(PathSelectors.any())
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); .build();
} }
} private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(this.apiProperties.getTitle())
.description(this.apiProperties.getDescription())
.version(this.apiProperties.getVersion())
.build();
}
private List<Parameter> globalParameterList() {
Parameter authTokenHeader = new ParameterBuilder()
.name("Session") // name of the header
.modelRef(new ModelRef("string")) // data-type of the header
.required(false)
.parameterType("header")
.description("Session ID")
.build();
return Collections.singletonList(authTokenHeader);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/v2/api-docs", "/v2/api-docs");
registry.addRedirectViewController("/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui");
registry.addRedirectViewController("/swagger-resources/configuration/security", "/swagger-resources/configuration/security");
registry.addRedirectViewController("/swagger-resources", "/swagger-resources");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html**").addResourceLocations("classpath:/META-INF/resources/swagger-ui.html");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}