NONRTRIC - ECS updates of the NBI
[nonrtric.git] / enrichment-coordinator-service / src / main / java / org / oransc / enrichment / SwaggerConfig.java
index 6fa38aa..6b5edc0 100644 (file)
 
 package org.oransc.enrichment;
 
-import com.fasterxml.classmate.TypeResolver;
-import com.google.common.base.Predicates;
+import io.swagger.v3.oas.annotations.OpenAPIDefinition;
+import io.swagger.v3.oas.annotations.info.Info;
+import io.swagger.v3.oas.annotations.info.License;
+import io.swagger.v3.oas.annotations.tags.Tag;
 
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
-
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import org.oransc.enrichment.controllers.StatusController;
+import org.oransc.enrichment.controllers.a1e.A1eConsts;
+import org.oransc.enrichment.controllers.r1consumer.ConsumerConsts;
+import org.oransc.enrichment.controllers.r1producer.ProducerConsts;
 
 /**
- * Swagger configuration class that uses swagger2 documentation type and scans
+ * Swagger configuration class that uses swagger documentation type and scans
  * all the controllers. To access the swagger gui go to
  * http://ip:port/swagger-ui.html
  */
-@Configuration
-@EnableSwagger2
-public class SwaggerConfig extends WebMvcConfigurationSupport {
-
-    static final String API_TITLE = "Enrichment Data service";
-    static final String DESCRIPTION = "This page lists all the rest apis for the service.";
-    static final String VERSION = "1.0";
-    @SuppressWarnings("squid:S1075") // Refactor your code to get this URI from a customizable parameter.
-    static final String RESOURCES_PATH = "classpath:/META-INF/resources/";
-    static final String WEBJARS_PATH = RESOURCES_PATH + "webjars/";
-    static final String SWAGGER_UI = "swagger-ui.html";
-    static final String WEBJARS = "/webjars/**";
 
-    /**
-     * Gets the API info.
-     *
-     * @return the API info.
-     */
-    @Bean
-    public Docket api(TypeResolver resolver) {
-        return new Docket(DocumentationType.SWAGGER_2) //
-            .apiInfo(apiInfo()) //
-            .select() //
-            .apis(RequestHandlerSelectors.any()) //
-            .paths(PathSelectors.any()) //
-            .paths(Predicates.not(PathSelectors.regex("/error"))) // this endpoint is not implemented, but was
-                                                                  // visible for Swagger
-            .paths(Predicates.not(PathSelectors.regex("/actuator.*"))) // this endpoint is implemented by spring
-                                                                       // framework, exclude for now
-            .build();
+@OpenAPIDefinition( //
+    tags = { //
+        @Tag(name = A1eConsts.CONSUMER_API_NAME, description = A1eConsts.CONSUMER_API_DESCRIPTION),
+        @Tag(name = A1eConsts.CONSUMER_API_CALLBACKS_NAME, description = A1eConsts.CONSUMER_API_CALLBACKS_DESCRIPTION),
+        @Tag(
+            name = ProducerConsts.PRODUCER_API_CALLBACKS_NAME,
+            description = ProducerConsts.PRODUCER_API_CALLBACKS_DESCRIPTION),
+        @Tag(name = ProducerConsts.PRODUCER_API_NAME, description = ProducerConsts.PRODUCER_API_DESCRIPTION), //
+        @Tag(name = StatusController.API_NAME, description = StatusController.API_DESCRIPTION), //
+        @Tag(name = ConsumerConsts.CONSUMER_API_NAME, description = ConsumerConsts.CONSUMER_API_DESCRIPTION), //
+    }, //
+    info = @Info(
+        title = SwaggerConfig.API_TITLE, //
+        version = "1.0", //
+        description = SwaggerConfig.DESCRIPTION, //
+        license = @License(
+            name = "Copyright (C) 2020 Nordix Foundation. Licensed under the Apache License.",
+            url = "http://www.apache.org/licenses/LICENSE-2.0")))
+public class SwaggerConfig {
+    private SwaggerConfig() {
     }
 
-    private static ApiInfo apiInfo() {
-        return new ApiInfoBuilder() //
-            .title(API_TITLE) //
-            .description(DESCRIPTION) //
-            .version(VERSION) //
-            .build();
-    }
+    static final String API_TITLE = "Data management and exposure";
 
-    @Override
-    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
-        registry.addResourceHandler(SWAGGER_UI) //
-            .addResourceLocations(RESOURCES_PATH);
-
-        registry.addResourceHandler(WEBJARS) //
-            .addResourceLocations(WEBJARS_PATH);
-    }
+    static final String DESCRIPTION = "<h1>API documentation</h1>" //
+        + "<h2>General</h2>" //
+        + "<p>" //
+        + "  The service is mainly a broker between data producers and data consumers. A data producer has the ability to produce one or several types of data (Information Type). One type of data can be produced by zero to many producers. <br /><br />A data consumer can have several active data subscriptions (Information Job). One Information Job consists of the type of data to produce and additional parameters for filtering of the data. These parameters are different for different data types." //
+        + "</p>" //
+        + "<h2>APIs provided by the service</h2>" //
+        + "<h4>A1-EI</h4>" //
+        + "<p>" //
+        + "  This API is between Near-RT RIC and the Non-RT RIC." //
+        + "  The Near-RT RIC is a data consumer, which creates Information Jobs to subscribe for data." //
+        + "  In this context, the information is referred to as 'Enrichment Information', EI." //
+        + "</p>" //
+        + "<h4>Data producer API</h4>" //
+        + "<p>" //
+        + "  This API is provided by the Non-RT RIC platform and is intended to be part of the O-RAN R1 interface." //
+        + "  The API is for use by different kinds of data producers and provides support for:" //
+        + "<ul>" //
+        + "<li>Registry of supported information types and which parameters needed to setup a subscription.</li>" //
+        + "<li>Registry of existing data producers.</li>" //
+        + "<li>Callback API provided by producers to setup subscriptions.</li>" //
+        + "</ul>" //
+        + "</p>" //
+        + "<h4>Data consumer API</h4>" //
+        + "<p>" //
+        + "  This API is provided by the Non-RT RIC platform and is intended to be part of the O-RAN R1 interface." //
+        + "  The API is for use by different kinds of data consumers and provides support for:" //
+        + "<ul>" //
+        + "<li>Querying of available types of data to consume.</li>" //
+        + "<li>Management of data subscription jobs</li>" //
+        + "</ul>" //
+        + "</p>" //
+        + "<h4>Service status</h4>" //
+        + "<p>" //
+        + "  This API provides a means to monitor the health of this service." //
+        + "</p>";
 
 }