Adding swagger codegen
authorniamhcore <niamh.core@est.tech>
Mon, 19 Oct 2020 11:48:06 +0000 (12:48 +0100)
committerniamhcore <niamh.core@est.tech>
Thu, 22 Oct 2020 09:45:06 +0000 (10:45 +0100)
Link: https://jira.onap.org/browse/CCSDK-2907
Issue-ID: CCSDK-2907
Signed-off-by: Niamh Core <niamh.core@est.tech>
Change-Id: I07c27cd1709f9bc19d67443daaf0c9c59507a5a0

cps/cps-rest/docs/api/swagger/openapi.yml [new file with mode: 0644]
cps/cps-rest/pom.xml
cps/cps-rest/src/main/java/org/onap/cps/rest/config/JerseyConfig.java
cps/cps-rest/src/main/java/org/onap/cps/rest/controller/RestController.java
cps/pom.xml

diff --git a/cps/cps-rest/docs/api/swagger/openapi.yml b/cps/cps-rest/docs/api/swagger/openapi.yml
new file mode 100644 (file)
index 0000000..1f9019a
--- /dev/null
@@ -0,0 +1,402 @@
+openapi: 3.0.1
+info:
+  title: CPS API
+  description: Configuration Persistence Service API
+  version: "1.0"
+servers:
+  - url: //localhost:8088/
+tags:
+  - name: cps-resource
+    description: cps Resource
+paths:
+  /v1/dataspaces/{dataspace-name}/:
+    delete:
+      tags:
+        - cps-resource
+      summary: Delete the given dataspace
+      operationId: deleteDataspace
+      parameters:
+        - name: dataspace-name
+          in: path
+          description: dataspace-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        204:
+          description: No Content
+          content: {}
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+  /v1/dataspaces/{dataspace-name}/anchors:
+    get:
+      tags:
+        - cps-resource
+      summary: Read all anchors, given a dataspace
+      operationId: getAnchors
+      parameters:
+        - name: dataspace-name
+          in: path
+          description: dataspace-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+    post:
+      tags:
+        - cps-resource
+      summary: Create a new anchor in the given dataspace
+      operationId: createAnchor
+      parameters:
+        - name: dataspace-name
+          in: path
+          description: dataspace-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              required:
+                - file
+              properties:
+                file:
+                  type: string
+                  description: file
+                  format: binary
+        required: true
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        201:
+          description: Created
+          content: {}
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+  /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}:
+    get:
+      tags:
+        - cps-resource
+      summary: Read an anchor given a anchor and a dataspace
+      operationId: getAnchor
+      parameters:
+        - name: dataspace-name
+          in: path
+          description: dataspace-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+        - name: anchor-name
+          in: path
+          description: anchor-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+    delete:
+      tags:
+        - cps-resource
+      summary: Delete an anchor given a anchor and a dataspace
+      operationId: deleteAnchor
+      parameters:
+        - name: dataspace-name
+          in: path
+          description: dataspace-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+        - name: anchor-name
+          in: path
+          description: anchor-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        204:
+          description: No Content
+          content: {}
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+  /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes:
+    get:
+      tags:
+        - cps-resource
+      summary: Get a node given an anchor for the given dataspace
+      operationId: getNodeByDataspaceAndAnchor
+      parameters:
+        - name: dataspaceName
+          in: path
+          description: dataspaceName
+          required: true
+          schema:
+            type: integer
+            format: int32
+        - name: anchorpoint
+          in: path
+          description: anchorpoint
+          required: true
+          schema:
+            type: integer
+            format: int32
+      requestBody:
+        description: xpath
+        content:
+          application/json:
+            schema:
+              type: string
+        required: true
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+      x-codegen-request-body-name: xpath
+  /v1/dataspaces/{dataspace-name}/modules:
+    get:
+      tags:
+        - cps-resource
+      summary: Read all yang modules in the store
+      operationId: getModule
+      parameters:
+        - name: dataspaceName
+          in: path
+          description: dataspaceName
+          required: true
+          schema:
+            type: integer
+            format: int32
+        - name: namespace-name
+          in: query
+          description: namespace-name
+          schema:
+            type: integer
+            format: int32
+        - name: revision
+          in: query
+          description: revision
+          schema:
+            type: integer
+            format: int32
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+    post:
+      tags:
+        - cps-resource
+      summary: Create modules for the given dataspace
+      operationId: createModules
+      parameters:
+        - name: dataspace-name
+          in: path
+          description: dataspace-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              required:
+                - file
+              properties:
+                file:
+                  type: string
+                  description: file
+                  format: binary
+        required: true
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        201:
+          description: Created
+          content: {}
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+  /v1/dataspaces/{dataspace-name}/nodes:
+    get:
+      tags:
+        - cps-resource
+      summary: Get all nodes for a given dataspace using an xpath or schema node identifier
+      operationId: getNode
+      parameters:
+        - name: dataspaceName
+          in: path
+          description: dataspaceName
+          required: true
+          schema:
+            type: integer
+            format: int32
+      requestBody:
+        description: requestBody
+        content:
+          application/json:
+            schema:
+              type: string
+        required: true
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+      x-codegen-request-body-name: requestBody
+    post:
+      tags:
+        - cps-resource
+      summary: Create a node for a given anchor for the given dataspace
+      operationId: createNode
+      parameters:
+        - name: dataspace-name
+          in: path
+          description: dataspace-name
+          required: true
+          schema:
+            type: integer
+            format: int32
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              required:
+                - file
+              properties:
+                file:
+                  type: string
+                  description: file
+                  format: binary
+        required: true
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+        201:
+          description: Created
+          content: {}
+        401:
+          description: Unauthorized
+          content: {}
+        403:
+          description: Forbidden
+          content: {}
+        404:
+          description: Not Found
+          content: {}
+components: {}
index 274e57f..3cecc5f 100644 (file)
@@ -1,6 +1,6 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"\r
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">\r
     <modelVersion>4.0.0</modelVersion>\r
     <artifactId>cps-rest</artifactId>\r
     <parent>\r
                 </exclusion>\r
             </exclusions>\r
         </dependency>\r
+\r
+        <!--   Used by the generated API     -->\r
+        <dependency>\r
+            <groupId>org.apache.cxf</groupId>\r
+            <artifactId>cxf-bundle-jaxrs</artifactId>\r
+            <version>${cxf-bundle-jaxrs.version}</version>\r
+        </dependency>\r
+\r
+        <!--   Used by the generated API     -->\r
+        <dependency>\r
+            <groupId>org.apache.cxf</groupId>\r
+            <artifactId>cxf-rt-rs-service-description</artifactId>\r
+            <version>${cxf-rt-rs-service.version}</version>\r
+        </dependency>\r
+\r
     </dependencies>\r
 \r
     <build>\r
                     </execution>\r
                 </executions>\r
             </plugin>\r
+\r
+            <plugin>\r
+                <groupId>io.swagger.codegen.v3</groupId>\r
+                <artifactId>swagger-codegen-maven-plugin</artifactId>\r
+                <version>${swagger-codegen.version}</version>\r
+                <executions>\r
+                    <execution>\r
+                        <goals>\r
+                            <goal>generate</goal>\r
+                        </goals>\r
+                        <configuration>\r
+                            <inputSpec>${project.basedir}/docs/api/swagger/openapi.yml</inputSpec>\r
+                            <invokerPackage>org.onap.cps.rest.controller</invokerPackage>\r
+                            <modelPackage>org.onap.cps.rest.model</modelPackage>\r
+                            <apiPackage>org.onap.cps.rest.controller</apiPackage>\r
+                            <language>jaxrs-cxf</language>\r
+                            <generateSupportingFiles>true</generateSupportingFiles>\r
+                            <configOptions>\r
+                                <sourceFolder>src/gen/java</sourceFolder>\r
+                                <dateLibrary>java8</dateLibrary>\r
+                                <library>jersey2</library>\r
+                                <interfaceOnly>true</interfaceOnly>\r
+                            </configOptions>\r
+                        </configuration>\r
+                    </execution>\r
+                </executions>\r
+            </plugin>\r
             <plugin>\r
                 <!-- Download Swagger UI webjar. -->\r
                 <groupId>org.apache.maven.plugins</groupId>\r
                                     <version>${swagger-ui.version}</version>\r
                                 </artifactItem>\r
                             </artifactItems>\r
-                            <outputDirectory>${project.build.directory}/swagger-ui-${swagger-ui.version}</outputDirectory>\r
+                            <outputDirectory>\r
+                                ${project.build.directory}/swagger-ui-${swagger-ui.version}\r
+                            </outputDirectory>\r
                         </configuration>\r
                     </execution>\r
                 </executions>\r
                             <goal>copy-resources</goal>\r
                         </goals>\r
                         <configuration>\r
-                            <outputDirectory>${project.build.outputDirectory}/static/swagger-ui</outputDirectory>\r
+                            <outputDirectory>${project.build.outputDirectory}/static/swagger-ui\r
+                            </outputDirectory>\r
                             <resources>\r
                                 <resource>\r
-                                    <directory>${project.build.directory}/swagger-ui-${swagger-ui.version}/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}/</directory>\r
+                                    <directory>\r
+                                        ${project.build.directory}/swagger-ui-${swagger-ui.version}/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}/\r
+                                    </directory>\r
                                     <excludes>\r
                                         <exclude>**/*.gz</exclude>\r
                                     </excludes>\r
index ac781d3..553c16b 100644 (file)
@@ -34,7 +34,7 @@ import org.onap.cps.rest.controller.RestController;
 import org.springframework.context.annotation.Configuration;\r
 \r
 @Configuration\r
-@ApplicationPath("/api/cps")\r
+@ApplicationPath("api")\r
 public class JerseyConfig extends ResourceConfig {\r
 \r
     /**\r
index e86d329..18e24b4 100644 (file)
@@ -23,7 +23,9 @@ import com.google.gson.Gson;
 import com.google.gson.JsonSyntaxException;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import javax.persistence.PersistenceException;
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -34,6 +36,9 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.SecurityContext;
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataParam;
 import org.onap.cps.api.CpService;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -41,14 +46,66 @@ import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.EmptyResultDataAccessException;
 
-
-
-@Path("v1")
-public class RestController {
+@Path("cps")
+public class RestController implements CpsResourceApi {
 
     @Autowired
     private CpService cpService;
 
+    @Override
+    public Object createAnchor(Attachment fileDetail, Integer dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public Object createModules(Attachment fileDetail, Integer dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public Object createNode(Attachment fileDetail, Integer dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public Object deleteAnchor(Integer dataspaceName, Integer anchorName) {
+        return null;
+    }
+
+    @Override
+    public Object deleteDataspace(Integer dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public Object getAnchor(Integer dataspaceName, Integer anchorName) {
+        return null;
+    }
+
+    @Override
+    public Object getAnchors(Integer dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public Object getModule(Integer dataspaceName, Integer namespaceName, Integer revision) {
+        return null;
+    }
+
+    @Override
+    public Object getNode(@Valid String body, Integer dataspaceName) {
+        return null;
+    }
+
+    @Override
+    public Object getNodeByDataspaceAndAnchor(@Valid String body, Integer dataspaceName, Integer anchorpoint) {
+        return null;
+    }
+
+    /*
+    Old rest endpoints before contract first approach (Need to be removed).
+     */
+
     /**
      * Upload a yang model file.
      *
index 4e9ca39..dd98ca5 100644 (file)
         <url>http://www.onap.org/</url>\r
     </organization>\r
 \r
-    <properties>\r
-        <java.version>11</java.version>\r
-        <springboot.version>2.3.3.RELEASE</springboot.version>\r
-        <oparent.version>3.1.0</oparent.version>\r
-        <yangtools.version>5.0.6</yangtools.version>\r
-        <swagger.version>2.1.4</swagger.version>\r
-        <groovy.version>3.0.6</groovy.version>\r
-        <spock-core.version>2.0-M2-groovy-3.0</spock-core.version>\r
-        <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>\r
-        <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>\r
-        <maven-replacer-plugin.version>1.5.3</maven-replacer-plugin.version>\r
-        <swagger-ui.version>3.35.0</swagger-ui.version>\r
-        <hibernate-types.version>2.10.0</hibernate-types.version>\r
-    </properties>\r
+  <properties>\r
+    <java.version>11</java.version>\r
+    <springboot.version>2.3.3.RELEASE</springboot.version>\r
+    <oparent.version>3.1.0</oparent.version>\r
+    <yangtools.version>5.0.6</yangtools.version>\r
+    <swagger.version>2.1.4</swagger.version>\r
+    <groovy.version>3.0.6</groovy.version>\r
+    <spock-core.version>2.0-M2-groovy-3.0</spock-core.version>\r
+    <swagger-codegen.version>3.0.18</swagger-codegen.version>\r
+    <cxf-rt-rs-service.version>3.0.0</cxf-rt-rs-service.version>\r
+    <cxf-bundle-jaxrs.version>2.2.9</cxf-bundle-jaxrs.version>\r
+    <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>\r
+    <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>\r
+    <maven-replacer-plugin.version>1.5.3</maven-replacer-plugin.version>\r
+    <swagger-ui.version>3.35.0</swagger-ui.version>\r
+    <hibernate-types.version>2.10.0</hibernate-types.version>\r
+  </properties>\r
 \r
     <dependencyManagement>\r
         <dependencies>\r
 \r
             <!-- Mandatory plugins for using Spock -->\r
             <plugin>\r
-                <!-- The gmavenplus plugin is used to compile Groovy code. \r
+                <!-- The gmavenplus plugin is used to compile Groovy code.\r
                     To learn more about this plugin, visit https://github.com/groovy/GMavenPlus/wiki -->\r
                 <groupId>org.codehaus.gmavenplus</groupId>\r
                 <artifactId>gmavenplus-plugin</artifactId>\r
                     </execution>\r
                 </executions>\r
             </plugin>\r
-            <!-- Required because names of spec classes don't match default \r
+            <!-- Required because names of spec classes don't match default\r
                 Surefire patterns (`*Test` etc.) -->\r
             <plugin>\r
                 <groupId>org.apache.maven.plugins</groupId>\r