Swagger codegen using Spring framework
authorputhuparambil.aditya <aditya.puthuparambil@bell.ca>
Mon, 2 Nov 2020 11:31:39 +0000 (11:31 +0000)
committerputhuparambil.aditya <aditya.puthuparambil@bell.ca>
Tue, 3 Nov 2020 11:11:55 +0000 (11:11 +0000)
1. Pom.xml updated to generate API code using Swagger codegen.
2. Moved the createModule code to the method implemented by Swagger.

JIRA: https://jira.onap.org/browse/CCSDK-2897

Issue-ID: CCSDK-2897
Signed-off-by: puthuparambil.aditya <aditya.puthuparambil@bell.ca>
Change-Id: Iadd3dc0402f06a597a179148fd5f43e0fe7c48f6
Signed-off-by: puthuparambil.aditya <aditya.puthuparambil@bell.ca>
cps/cps-dependencies/pom.xml
cps/cps-parent/pom.xml
cps/cps-rest/docs/api/swagger/openapi.yml
cps/cps-rest/pom.xml
cps/cps-rest/src/main/java/org/onap/cps/rest/controller/CpsRestController.java

index 6f50cd0..ad71b11 100644 (file)
@@ -17,6 +17,7 @@
         <hibernate-types.version>2.10.0</hibernate-types.version>
         <spock-core.version>2.0-M2-groovy-3.0</spock-core.version>
         <springboot.version>2.3.3.RELEASE</springboot.version>
+        <springfox-swagger2.version>2.6.1</springfox-swagger2.version>
         <swagger.version>2.1.4</swagger.version>
         <yangtools.version>5.0.6</yangtools.version>
     </properties>
                 <artifactId>swagger-jaxrs2</artifactId>
                 <version>${swagger.version}</version>
             </dependency>
+            <dependency>
+                <groupId>io.springfox</groupId>
+                <artifactId>springfox-swagger2</artifactId>
+                <version>${springfox-swagger2.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>io.springfox</groupId>
+                <artifactId>springfox-swagger-ui</artifactId>
+                <version>${springfox-swagger2.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.vladmihalcea</groupId>
                 <artifactId>hibernate-types-52</artifactId>
index 2ddb2b6..db80970 100644 (file)
@@ -22,6 +22,7 @@
         <maven-replacer-plugin.version>1.5.3</maven-replacer-plugin.version>
         <oparent.version>3.1.0</oparent.version>
         <spring-boot-maven-plugin.version>2.3.3.RELEASE</spring-boot-maven-plugin.version>
+        <swagger-codegen-maven-plugin.version>3.0.18</swagger-codegen-maven-plugin.version>
         <swagger-ui.version>3.35.0</swagger-ui.version>
     </properties>
 
                         </execution>
                     </executions>
                 </plugin>
+                <!-- Swagger code generation. -->
+                <plugin>
+                    <groupId>io.swagger.codegen.v3</groupId>
+                    <artifactId>swagger-codegen-maven-plugin</artifactId>
+                    <version>${swagger-codegen-maven-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>generate</goal>
+                            </goals>
+                            <configuration>
+                                <inputSpec>${project.basedir}/docs/api/swagger/openapi.yml</inputSpec>
+                                <invokerPackage>org.onap.cps.rest.controller</invokerPackage>
+                                <modelPackage>org.onap.cps.rest.model</modelPackage>
+                                <apiPackage>org.onap.cps.rest.api</apiPackage>
+                                <language>spring</language>
+                                <generateSupportingFiles>false</generateSupportingFiles>
+                                <configOptions>
+                                    <sourceFolder>src/gen/java</sourceFolder>
+                                    <dateLibrary>java11</dateLibrary>
+                                    <interfaceOnly>true</interfaceOnly>
+                                    <useTags>true</useTags>
+                                </configOptions>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
                 <plugin>
                     <!-- Download Swagger UI webjar. -->
                     <groupId>org.apache.maven.plugins</groupId>
index f116c26..9b2ac1e 100644 (file)
@@ -6,13 +6,13 @@ info:
 servers:
   - url: //localhost:8088/
 tags:
-  - name: cps-resource
+  - name: cps-rest
     description: cps Resource
 paths:
   /v1/dataspaces/{dataspace-name}/:
     delete:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Delete the given dataspace
       operationId: deleteDataspace
       parameters:
@@ -41,7 +41,7 @@ paths:
   /v1/dataspaces/{dataspace-name}/anchors:
     get:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Read all anchors, given a dataspace
       operationId: getAnchors
       parameters:
@@ -69,7 +69,7 @@ paths:
           content: {}
     post:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Create a new anchor in the given dataspace
       operationId: createAnchor
       parameters:
@@ -86,9 +86,9 @@ paths:
               required:
                 - file
               properties:
-                file:
+                multipartFile:
                   type: string
-                  description: file
+                  description: multipartFile
                   format: binary
         required: true
       responses:
@@ -113,7 +113,7 @@ paths:
   /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}:
     get:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Read an anchor given a anchor and a dataspace
       operationId: getAnchor
       parameters:
@@ -147,7 +147,7 @@ paths:
           content: {}
     delete:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Delete an anchor given a anchor and a dataspace
       operationId: deleteAnchor
       parameters:
@@ -182,7 +182,7 @@ paths:
   /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes:
     get:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Get a node given an anchor for the given dataspace
       operationId: getNodeByDataspaceAndAnchor
       parameters:
@@ -225,7 +225,7 @@ paths:
   /v1/dataspaces/{dataspace-name}/modules:
     get:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Read all yang modules in the store
       operationId: getModule
       parameters:
@@ -263,7 +263,7 @@ paths:
           content: {}
     post:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Create modules for the given dataspace
       operationId: createModules
       parameters:
@@ -280,9 +280,9 @@ paths:
               required:
                 - file
               properties:
-                file:
+                multipartFile:
                   type: string
-                  description: file
+                  description: multipartFile
                   format: binary
         required: true
       responses:
@@ -307,7 +307,7 @@ paths:
   /v1/dataspaces/{dataspace-name}/nodes:
     get:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Get all nodes for a given dataspace using an xpath or schema node identifier
       operationId: getNode
       parameters:
@@ -343,7 +343,7 @@ paths:
       x-codegen-request-body-name: requestBody
     post:
       tags:
-        - cps-resource
+        - cps-rest
       summary: Create a node for a given anchor for the given dataspace
       operationId: createNode
       parameters:
@@ -360,9 +360,9 @@ paths:
               required:
                 - file
               properties:
-                file:
+                multipartFile:
                   type: string
-                  description: file
+                  description: multipartFile
                   format: binary
         required: true
       responses:
index f9be75b..fcd97dc 100644 (file)
             <groupId>io.swagger.core.v3</groupId>\r
             <artifactId>swagger-jaxrs2</artifactId>\r
         </dependency>\r
+        <dependency>\r
+            <groupId>io.springfox</groupId>\r
+            <artifactId>springfox-swagger2</artifactId>\r
+        </dependency>\r
+        <dependency>\r
+            <groupId>io.springfox</groupId>\r
+            <artifactId>springfox-swagger-ui</artifactId>\r
+        </dependency>\r
         <dependency>\r
             <groupId>org.springframework.boot</groupId>\r
             <artifactId>spring-boot-starter-test</artifactId>\r
                 <groupId>org.springframework.boot</groupId>\r
                 <artifactId>spring-boot-maven-plugin</artifactId>\r
             </plugin>\r
+            <!-- Swagger code generation. -->\r
+            <plugin>\r
+                <groupId>io.swagger.codegen.v3</groupId>\r
+                <artifactId>swagger-codegen-maven-plugin</artifactId>\r
+            </plugin>\r
             <plugin>\r
                 <!-- Download Swagger UI webjar. -->\r
                 <groupId>org.apache.maven.plugins</groupId>\r
index a577af7..9a31b6d 100644 (file)
@@ -27,8 +27,10 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import javax.persistence.PersistenceException;
+import javax.validation.Valid;
 import org.hibernate.exception.ConstraintViolationException;
 import org.onap.cps.api.CpService;
+import org.onap.cps.rest.api.CpsRestApi;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,38 +46,75 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 @RestController
-public class CpsRestController {
+public class CpsRestController implements CpsRestApi {
 
     @Autowired
     private CpService cpService;
 
-    /*
-    Old rest endpoints before contract first approach (Need to be removed).
-     */
+    @Override
+    public ResponseEntity<Object> createAnchor(@Valid MultipartFile multipartFile, String dataspaceName) {
+        return null;
+    }
 
-    /**
-     * Upload a yang model file.
-     *
-     * @param uploadedFile the yang model Multipart File.
-     * @param dataspaceName the dataspace name linked to the model.
-     * @return a ResponseEntity.
-     */
-    @PostMapping("/dataspaces/{dataspace_name}/modules")
-    public final ResponseEntity<String> uploadYangModelFile(
-        @RequestParam("file") MultipartFile uploadedFile,
-        @PathVariable("dataspace_name") String dataspaceName) {
+    @Override
+    public ResponseEntity<Object> createModules(@Valid MultipartFile multipartFile, String dataspaceName) {
         try {
-            final File fileToParse = saveToFile(uploadedFile);
+            final File fileToParse = saveToFile(multipartFile);
             final SchemaContext schemaContext = cpService.parseAndValidateModel(fileToParse);
             cpService.storeSchemaContext(schemaContext, dataspaceName);
-            return new ResponseEntity<String>("Resource successfully created", HttpStatus.CREATED);
+            return new ResponseEntity<>("Resource successfully created", HttpStatus.CREATED);
         } catch (final YangParserException | ConstraintViolationException e) {
-            return new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST);
+            return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
         } catch (final Exception e) {
-            return new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+            return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
         }
     }
 
+    @Override
+    public ResponseEntity<Object> createNode(@Valid MultipartFile multipartFile, String dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<Object> deleteAnchor(String dataspaceName, String anchorName) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<Object> deleteDataspace(String dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<Object> getAnchor(String dataspaceName, String anchorName) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<Object> getAnchors(String dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<Object> getModule(String dataspaceName, @Valid String namespaceName, @Valid String revision) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<Object> getNode(@Valid String body, String dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<Object> getNodeByDataspaceAndAnchor(@Valid String body, String dataspaceName,
+        String anchorName) {
+        return null;
+    }
+
+    /*
+    Old rest endpoints before contract first approach (Need to be removed).
+     */
+
     /**
      * Upload a JSON file.
      *