--- /dev/null
+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: {}
<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
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
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;
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;
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.
*
<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