From 4d520016514834bef903401518be5989b390874a Mon Sep 17 00:00:00 2001 From: Renu Kumari Date: Mon, 30 Aug 2021 11:50:43 -0400 Subject: Add ncmp endpoints to swagger-ui - added ncmp-enpoints to swagger-ui - removed springfox dependencies - removed Docket configuration as we are loading ui from openapi.yml - removed endpoints which are not implemented - Fixed ncmp basepath as per CPS-616 Issue-ID: CPS-601 Issue-ID: CPS-616 Signed-off-by: Renu Kumari Change-Id: I03c7789f48a12d3ffd5fcb934d7ba6347d4044e4 --- cps-application/src/main/resources/application.yml | 13 +- cps-ncmp-rest/docs/openapi/ncmproxy.yml | 2 +- cps-ncmp-rest/docs/openapi/openapi.yml | 5 +- cps-ncmp-rest/pom.xml | 29 ++- .../onap/cps/ncmp/config/NetworkCmProxyConfig.java | 47 ----- .../ncmp/config/NetworkCmProxyConfigSpec.groovy | 33 --- .../controller/NetworkCmProxyControllerSpec.groovy | 36 ++-- cps-ncmp-rest/src/test/resources/application.yml | 3 +- .../src/test/resources/application.yml | 22 -- cps-parent/pom.xml | 13 ++ cps-rest/docs/openapi/components.yml | 219 ++++++++++++++++++++ cps-rest/docs/openapi/cpsAdmin.yml | 202 ++++++++++++++++++ cps-rest/docs/openapi/cpsData.yml | 205 +++++++++++++++++++ cps-rest/docs/openapi/cpsQuery.yml | 42 ++++ cps-rest/docs/openapi/openapi.yml | 72 +++++++ cps-rest/pom.xml | 32 ++- .../main/java/org/onap/cps/config/CpsConfig.java | 16 -- .../cps/rest/controller/AdminRestController.java | 13 +- .../cps/rest/controller/DataRestController.java | 5 - cps-rest/src/main/resources/static/components.yml | 216 -------------------- cps-rest/src/main/resources/static/cpsAdmin.yml | 222 -------------------- cps-rest/src/main/resources/static/cpsData.yml | 226 --------------------- cps-rest/src/main/resources/static/cpsQuery.yml | 42 ---- cps-rest/src/main/resources/static/openapi.yml | 77 ------- .../org/onap/cps/config/CpsConfigSpec.groovy | 7 +- docker-compose/README.md | 5 +- docs/api/swagger/openapi.yml | 4 +- 27 files changed, 842 insertions(+), 966 deletions(-) delete mode 100644 cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java delete mode 100644 cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy delete mode 100644 cps-ncmp-service/src/test/resources/application.yml create mode 100644 cps-rest/docs/openapi/components.yml create mode 100644 cps-rest/docs/openapi/cpsAdmin.yml create mode 100644 cps-rest/docs/openapi/cpsData.yml create mode 100644 cps-rest/docs/openapi/cpsQuery.yml create mode 100644 cps-rest/docs/openapi/openapi.yml delete mode 100644 cps-rest/src/main/resources/static/components.yml delete mode 100644 cps-rest/src/main/resources/static/cpsAdmin.yml delete mode 100644 cps-rest/src/main/resources/static/cpsData.yml delete mode 100644 cps-rest/src/main/resources/static/cpsQuery.yml delete mode 100644 cps-rest/src/main/resources/static/openapi.yml diff --git a/cps-application/src/main/resources/application.yml b/cps-application/src/main/resources/application.yml index 39309d842..82c6e0aed 100644 --- a/cps-application/src/main/resources/application.yml +++ b/cps-application/src/main/resources/application.yml @@ -24,7 +24,7 @@ server: rest: api: cps-base-path: /cps/api - ncmp-base-path: /cps-ncmp/api + ncmp-base-path: /ncmp spring: main: @@ -84,12 +84,17 @@ notification: springdoc: swagger-ui: - url: /openapi.yml - path: /swagger-ui/index.html + disable-swagger-default-url: true + urlsPrimaryName: cps-core + urls: + - name: cps-core + url: /api-docs/cps-core/openapi.yaml + - name: cps-ncmp + url: /api-docs/cps-ncmp/openapi.yaml security: # comma-separated uri patterns which do not require authorization - permit-uri: /manage/**,/swagger-ui/**,/swagger-resources/**,/v3/api-docs + permit-uri: /manage/**,/swagger-ui/**,/swagger-resources/**,/api-docs auth: username: ${CPS_USERNAME} password: ${CPS_PASSWORD} diff --git a/cps-ncmp-rest/docs/openapi/ncmproxy.yml b/cps-ncmp-rest/docs/openapi/ncmproxy.yml index 8eed9b37b..138337d24 100755 --- a/cps-ncmp-rest/docs/openapi/ncmproxy.yml +++ b/cps-ncmp-rest/docs/openapi/ncmproxy.yml @@ -181,7 +181,7 @@ listNodeByCmHandleAndXpath: updateDmiRegistration: post: - description: Register a DMI Plugin with any new CM Handles. + description: Register a DMI Plugin with any new, updated or removed CM Handles. tags: - network-cm-proxy summary: DMI notifies NCMP of new CM Handles diff --git a/cps-ncmp-rest/docs/openapi/openapi.yml b/cps-ncmp-rest/docs/openapi/openapi.yml index 0dfe3c83a..8d8684a35 100755 --- a/cps-ncmp-rest/docs/openapi/openapi.yml +++ b/cps-ncmp-rest/docs/openapi/openapi.yml @@ -1,6 +1,7 @@ # ============LICENSE_START======================================================= # Copyright (C) 2021 Nordix Foundation # Modifications Copyright (C) 2021 Pantheon.tech +# Modifications Copyright (C) 2021 Bell Canada # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -23,7 +24,7 @@ info: description: NCMP to CPS Proxy API version: "1.0" servers: - - url: //localhost:8088/ + - url: /ncmp paths: /v1/cm-handles/{cm-handle}/node: $ref: 'ncmproxy.yml#/nodeByCmHandleAndXpath' @@ -37,7 +38,7 @@ paths: /v1/cm-handles/{cm-handle}/nodes: $ref: 'ncmproxy.yml#/nodesByCmHandleAndXpath' - /ncmp-dmi/v1/ch: + /v1/ch: $ref: 'ncmproxy.yml#/updateDmiRegistration' /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-operational/{resourceIdentifier}: diff --git a/cps-ncmp-rest/pom.xml b/cps-ncmp-rest/pom.xml index dbe1af097..d3de688e2 100644 --- a/cps-ncmp-rest/pom.xml +++ b/cps-ncmp-rest/pom.xml @@ -2,6 +2,7 @@ org.codehaus.groovy @@ -119,6 +116,7 @@ swagger-codegen-maven-plugin + code-gen generate @@ -139,6 +137,29 @@ + + maven-resources-plugin + + + copy-resources + compile + + copy-resources + + + ${project.basedir}/target/classes/static/api-docs/cps-ncmp + + + ${project.basedir}/target/generated-sources/swagger/ + + openapi.yaml + + + + + + + diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java deleted file mode 100644 index 300765d42..000000000 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Pantheon.tech - * Modifications (C) 2021 Nordix Foundation - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.ncmp.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; - -@Configuration -public class NetworkCmProxyConfig { - - /** - * Swagger-ui configuration. - */ - @Bean("ncmp-docket") - public Docket api() { - return new Docket(DocumentationType.OAS_30) - .groupName("ncmp-docket") - .select() - .apis(RequestHandlerSelectors.any()) - .paths(PathSelectors.any()) - .build(); - } - -} \ No newline at end of file diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy deleted file mode 100644 index 4b0e2561e..000000000 --- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy +++ /dev/null @@ -1,33 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 highstreet technologies GmbH - * Modification Copyright (C) 2021 Nordix Foundation - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.ncmp.config - -import spock.lang.Specification -import springfox.documentation.spring.web.plugins.Docket - -class NetworkCmProxyConfigSpec extends Specification { - def objectUnderTest = new NetworkCmProxyConfig() - - def 'NetworkCmProxy configuration has a Docket API.'() { - expect: 'the NetworkCmProxy configuration has a Docket API' - objectUnderTest.api() instanceof Docket - } -} diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy index 1a2d3a204..4ff0ca421 100644 --- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy @@ -3,6 +3,7 @@ * Copyright (C) 2021 Pantheon.tech * Modification Copyright (C) 2021 highstreet technologies GmbH * Modification Copyright (C) 2021 Nordix Foundation + * Modification Copyright (C) 2021 Bell Canada. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,7 +43,7 @@ import org.springframework.http.MediaType import org.springframework.test.web.servlet.MockMvc import spock.lang.Specification -@WebMvcTest +@WebMvcTest(NetworkCmProxyController) class NetworkCmProxyControllerSpec extends Specification { @Autowired @@ -54,17 +55,8 @@ class NetworkCmProxyControllerSpec extends Specification { @SpringBean ObjectMapper objectMapper = new ObjectMapper() - @Value('${rest.api.ncmp-base-path}') - def basePath - - def deprecatedDataNodeBaseEndPoint - - def ncmpDmiEndpoint - - def setup() { - deprecatedDataNodeBaseEndPoint = "$basePath/v1" - ncmpDmiEndpoint = "$basePath/ncmp-dmi/v1" - } + @Value('${rest.api.ncmp-base-path}/v1') + def ncmpBasePathV1 def cmHandle = 'some handle' def xpath = 'some xpath' @@ -75,7 +67,7 @@ class NetworkCmProxyControllerSpec extends Specification { def cpsPath = 'some cps-path' mockNetworkCmProxyDataService.queryDataNodes(cmHandle, cpsPath, expectedCpsDataServiceOption) >> [dataNode] and: 'the query endpoint' - def dataNodeEndpoint = "$deprecatedDataNodeBaseEndPoint/cm-handles/$cmHandle/nodes/query" + def dataNodeEndpoint = "$ncmpBasePathV1/cm-handles/$cmHandle/nodes/query" when: 'query data nodes API is invoked' def response = mvc.perform(get(dataNodeEndpoint) .param('cps-path', cpsPath) @@ -97,7 +89,7 @@ class NetworkCmProxyControllerSpec extends Specification { def jsonData = 'json data' when: 'post request is performed' def response = mvc.perform( - post("$deprecatedDataNodeBaseEndPoint/cm-handles/$cmHandle/nodes") + post("$ncmpBasePathV1/cm-handles/$cmHandle/nodes") .contentType(MediaType.APPLICATION_JSON) .content(jsonData) .param('xpath', reqXpath) @@ -119,7 +111,7 @@ class NetworkCmProxyControllerSpec extends Specification { def parentNodeXpath = 'parent node xpath' when: 'post request is performed' def response = mvc.perform( - post("$deprecatedDataNodeBaseEndPoint/cm-handles/$cmHandle/list-node") + post("$ncmpBasePathV1/cm-handles/$cmHandle/list-node") .contentType(MediaType.APPLICATION_JSON) .content(jsonData) .param('xpath', parentNodeXpath) @@ -134,7 +126,7 @@ class NetworkCmProxyControllerSpec extends Specification { given: 'json data' def jsonData = 'json data' and: 'the query endpoint' - def endpoint = "$deprecatedDataNodeBaseEndPoint/cm-handles/$cmHandle/nodes" + def endpoint = "$ncmpBasePathV1/cm-handles/$cmHandle/nodes" when: 'patch request is performed' def response = mvc.perform( patch(endpoint) @@ -152,7 +144,7 @@ class NetworkCmProxyControllerSpec extends Specification { given: 'json data' def jsonData = 'json data' and: 'the query endpoint' - def endpoint = "$deprecatedDataNodeBaseEndPoint/cm-handles/$cmHandle/nodes" + def endpoint = "$ncmpBasePathV1/cm-handles/$cmHandle/nodes" when: 'put request is performed' def response = mvc.perform( put(endpoint) @@ -172,7 +164,7 @@ class NetworkCmProxyControllerSpec extends Specification { def dataNode = new DataNodeBuilder().withXpath(xpath).withLeaves(["leaf": "value"]).build() mockNetworkCmProxyDataService.getDataNode(cmHandle, xpath, OMIT_DESCENDANTS) >> dataNode and: 'the query endpoint' - def endpoint = "$deprecatedDataNodeBaseEndPoint/cm-handles/$cmHandle/node" + def endpoint = "$ncmpBasePathV1/cm-handles/$cmHandle/node" when: 'get request is performed through REST API' def response = mvc.perform(get(endpoint).param('xpath', xpath)).andReturn().response then: 'a success response is returned' @@ -186,7 +178,7 @@ class NetworkCmProxyControllerSpec extends Specification { def jsonData = TestUtils.getResourceFileContent('dmi-registration.json') when: 'post request is performed' def response = mvc.perform( - post("$ncmpDmiEndpoint/ch") + post("$ncmpBasePathV1/ch") .contentType(MediaType.APPLICATION_JSON) .content(jsonData) ).andReturn().response @@ -198,7 +190,7 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Get Resource Data from pass-through operational.' () { given: 'resource data url' - def getUrl = "$basePath/v1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-operational" + + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-operational" + "/testResourceIdentifier?fields=testFields&depth=5" when: 'get data resource request is performed' def response = mvc.perform( @@ -218,7 +210,7 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Get Resource Data from pass-through running.' () { given: 'resource data url' - def getUrl = "$basePath/v1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + "/testResourceIdentifier?fields=testFields&depth=5" and: 'ncmp service returns json object' mockNetworkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle('testCmHandle', @@ -240,7 +232,7 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Create Resource Data from pass-through running using POST.' () { given: 'resource data url' - def getUrl = "$basePath/v1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + "/testResourceIdentifier" when: 'get data resource request is performed' def response = mvc.perform( diff --git a/cps-ncmp-rest/src/test/resources/application.yml b/cps-ncmp-rest/src/test/resources/application.yml index 8ffb8827f..848738a76 100644 --- a/cps-ncmp-rest/src/test/resources/application.yml +++ b/cps-ncmp-rest/src/test/resources/application.yml @@ -1,5 +1,6 @@ # ============LICENSE_START======================================================= # Copyright (C) 2021 Nordix Foundation +# Modifications Copyright (C) 2021 Bell Canada. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,5 +19,5 @@ rest: api: - ncmp-base-path: /cps-ncmp/api + ncmp-base-path: /ncmp spring: diff --git a/cps-ncmp-service/src/test/resources/application.yml b/cps-ncmp-service/src/test/resources/application.yml deleted file mode 100644 index 8ffb8827f..000000000 --- a/cps-ncmp-service/src/test/resources/application.yml +++ /dev/null @@ -1,22 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021 Nordix Foundation -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -rest: - api: - ncmp-base-path: /cps-ncmp/api -spring: diff --git a/cps-parent/pom.xml b/cps-parent/pom.xml index 46594dabe..e8861006e 100755 --- a/cps-parent/pom.xml +++ b/cps-parent/pom.xml @@ -123,6 +123,19 @@ io.swagger.codegen.v3 swagger-codegen-maven-plugin 3.0.27 + + + openapi-yaml-gen + + generate + + compile + + ${project.basedir}/docs/openapi/openapi.yml + openapi-yaml + + + com.github.spotbugs diff --git a/cps-rest/docs/openapi/components.yml b/cps-rest/docs/openapi/components.yml new file mode 100644 index 000000000..3d2eb57e4 --- /dev/null +++ b/cps-rest/docs/openapi/components.yml @@ -0,0 +1,219 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2021 Bell Canada. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +components: + schemas: + + AnchorDetails: + type: object + title: Anchor details by anchor Name + properties: + name: + type: string + example: my_anchor + dataspaceName: + type: string + example: my_dataspace + schemaSetName: + type: string + example: my_schema_set + + ErrorMessage: + type: object + title: Error + properties: + status: + type: string + example: 400 + message: + type: string + example: Dataspace not found + details: + type: string + example: Dataspace with name D1 does not exist. + + MultipartFile: + type: object + required: + - file + properties: + file: + type: string + description: multipartFile + format: binary + example: http://example.com/examples/example.yang + + ModuleReferences: + type: object + title: Module reference object + properties: + name: + type: string + example: module_reference_name + namespace: + type: string + example: module_reference_namespace + revision: + type: string + example: module_reference_revision + + SchemaSetDetails: + type: object + title: Schema set details by dataspace and schemasetName + properties: + dataspaceName: + type: string + example: my_dataspace + moduleReferences: + type: array + items: + $ref: '#/components/schemas/ModuleReferences' + name: + type: string + example: my_schema_set + + parameters: + dataspaceNameInQuery: + name: dataspace-name + in: query + description: dataspace-name + required: true + schema: + type: string + dataspaceNameInPath: + name: dataspace-name + in: path + description: dataspace-name + required: true + schema: + type: string + anchorNameInPath: + name: anchor-name + in: path + description: anchor-name + required: true + schema: + type: string + schemaSetNameInQuery: + name: schema-set-name + in: query + description: schema-set-name + required: true + schema: + type: string + schemaSetNameInPath: + name: schema-set-name + in: path + description: schema-set-name + required: true + schema: + type: string + anchorNameInQuery: + name: anchor-name + in: query + description: anchor-name + required: true + schema: + type: string + xpathInQuery: + name: xpath + in: query + description: xpath + required: false + schema: + type: string + default: / + requiredXpathInQuery: + name: xpath + in: query + description: xpath + required: true + schema: + type: string + cpsPathInQuery: + name: cps-path + in: query + description: cps-path + required: false + schema: + type: string + default: / + includeDescendantsOptionInQuery: + name: include-descendants + in: query + description: include-descendants + required: false + schema: + type: boolean + default: false + observedTimestampInQuery: + name: observed-timestamp + in: query + description: observed-timestamp + required: false + schema: + type: string + example: '2021-03-21T00:10:34.030-0100' + + responses: + NotFound: + description: The specified resource was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Conflict: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Ok: + description: OK + content: + application/json: + schema: + type: object + example: { "key": "value" } + Created: + description: Created + content: + text/plain: + schema: + type: string + NoContent: + description: No Content + content: {} diff --git a/cps-rest/docs/openapi/cpsAdmin.yml b/cps-rest/docs/openapi/cpsAdmin.yml new file mode 100644 index 000000000..a022ef1d9 --- /dev/null +++ b/cps-rest/docs/openapi/cpsAdmin.yml @@ -0,0 +1,202 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2021 Bell Canada. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +dataspaces: + post: + description: Create a new dataspace + tags: + - cps-admin + summary: Create a dataspace + operationId: createDataspace + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInQuery' + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +schemaSet: + post: + description: Create a new schema set in the given dataspace + tags: + - cps-admin + summary: Create a schema set + operationId: createSchemaSet + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' + requestBody: + required: true + content: + multipart/form-data: + schema: + $ref: 'components.yml#/components/schemas/MultipartFile' + + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +schemaSetBySchemaSetName: + get: + description: Read a schema set given a schema set name and a dataspace + tags: + - cps-admin + summary: Get a schema set + operationId: getSchemaSet + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: 'components.yml#/components/schemas/SchemaSetDetails' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + + delete: + description: Delete a schema set given a schema set name and a dataspace + tags: + - cps-admin + summary: Delete a schema set + operationId: deleteSchemaSet + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' + responses: + '204': + $ref: 'components.yml#/components/responses/NoContent' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '409': + $ref: 'components.yml#/components/responses/Conflict' + +anchorsByDataspace: + get: + description: Read all anchors, given a dataspace + tags: + - cps-admin + summary: Get anchors + operationId: getAnchors + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: 'components.yml#/components/schemas/AnchorDetails' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + + post: + description: Create a new anchor in the given dataspace + tags: + - cps-admin + summary: Create an anchor + operationId: createAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' + - $ref: 'components.yml#/components/parameters/anchorNameInQuery' + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +anchorByDataspaceAndAnchorName: + get: + description: Read an anchor given an anchor name and a dataspace + tags: + - cps-admin + summary: Get an anchor + operationId: getAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: 'components.yml#/components/schemas/AnchorDetails' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + + delete: + description: Delete an anchor given an anchor name and a dataspace + tags: + - cps-admin + summary: Delete an anchor + operationId: deleteAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + responses: + '204': + $ref: 'components.yml#/components/responses/NoContent' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' \ No newline at end of file diff --git a/cps-rest/docs/openapi/cpsData.yml b/cps-rest/docs/openapi/cpsData.yml new file mode 100644 index 000000000..d456f44e6 --- /dev/null +++ b/cps-rest/docs/openapi/cpsData.yml @@ -0,0 +1,205 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2021 Bell Canada. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +nodeByDataspaceAndAnchor: + get: + description: Get a node with an option to retrieve all the children for a given anchor and dataspace + tags: + - cps-data + summary: Get a node + operationId: getNodeByDataspaceAndAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + example: { "child": my_child,"leafList": "leafListElement1, leafListElement2", "leaf": my_leaf } + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + x-codegen-request-body-name: xpath + +listNodeByDataspaceAndAnchor: + post: + description: Add list-node child elements to existing node for a given anchor and dataspace + tags: + - cps-data + summary: Add list-node child element(s) under existing parent node + operationId: addListNodeElements + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' + - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + put: + description: Replace list-node child elements under existing node for a given anchor and dataspace + tags: + - cps-data + summary: Replace list-node child element(s) under existing parent node + operationId: replaceListNodeElements + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' + - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '200': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + delete: + description: Delete list-node child elements under existing node for a given anchor and dataspace + tags: + - cps-data + summary: Delete list-node child element(s) under existing parent node + operationId: deleteListNodeElements + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' + - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' + responses: + '204': + $ref: 'components.yml#/components/responses/NoContent' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +nodesByDataspaceAndAnchor: + post: + description: Create a node for a given anchor and dataspace + tags: + - cps-data + summary: Create a node + operationId: createNode + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + patch: + description: Update a data node leaves for a given dataspace and anchor and a parent node xpath + tags: + - cps-data + summary: Update node leaves + operationId: updateNodeLeaves + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + put: + description: Replace a node with descendants for a given dataspace, anchor and a parent node xpath + tags: + - cps-data + summary: Replace a node with descendants + operationId: replaceNode + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' \ No newline at end of file diff --git a/cps-rest/docs/openapi/cpsQuery.yml b/cps-rest/docs/openapi/cpsQuery.yml new file mode 100644 index 000000000..f45f3f41a --- /dev/null +++ b/cps-rest/docs/openapi/cpsQuery.yml @@ -0,0 +1,42 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2021 Nordix Foundation +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +nodesByDataspaceAndAnchorAndCpsPath: + get: + description: Query data nodes for the given dataspace and anchor using CPS path + tags: + - cps-query + summary: Query data nodes + operationId: getNodesByDataspaceAndAnchorAndCpsPath + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/cpsPathInQuery' + - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + x-codegen-request-body-name: xpath diff --git a/cps-rest/docs/openapi/openapi.yml b/cps-rest/docs/openapi/openapi.yml new file mode 100644 index 000000000..f9881fb15 --- /dev/null +++ b/cps-rest/docs/openapi/openapi.yml @@ -0,0 +1,72 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2021 Nordix Foundation +# Modifications Copyright (C) 2021 Pantheon.tech +# Modifications Copyright (C) 2021 Bell Canada. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +openapi: 3.0.1 +info: + title: ONAP Open API v3 Configuration Persistence Service + description: Configuration Persistence Service is a Model Driven Generic Database + version: "1.0.0" + contact: + name: ONAP + url: "https://onap.readthedocs.io" + email: "onap-discuss@lists.onap.org" + license: + name: "Apache 2.0" + url: "http://www.apache.org/licenses/LICENSE-2.0" + x-planned-retirement-date: "202212" + x-component: "Modeling" + x-logo: + url: "cps_logo.png" + +servers: + - url: /cps/api +tags: + - name: cps-admin + description: cps Admin + - name: cps-data + description: cps Data +paths: + + /v1/dataspaces: + $ref: 'cpsAdmin.yml#/dataspaces' + + /v1/dataspaces/{dataspace-name}/anchors: + $ref: 'cpsAdmin.yml#/anchorsByDataspace' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}: + $ref: 'cpsAdmin.yml#/anchorByDataspaceAndAnchorName' + + /v1/dataspaces/{dataspace-name}/schema-sets: + $ref: 'cpsAdmin.yml#/schemaSet' + + /v1/dataspaces/{dataspace-name}/schema-sets/{schema-set-name}: + $ref: 'cpsAdmin.yml#/schemaSetBySchemaSetName' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/node: + $ref: 'cpsData.yml#/nodeByDataspaceAndAnchor' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes: + $ref: 'cpsData.yml#/nodesByDataspaceAndAnchor' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/list-nodes: + $ref: 'cpsData.yml#/listNodeByDataspaceAndAnchor' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query: + $ref: 'cpsQuery.yml#/nodesByDataspaceAndAnchorAndCpsPath' diff --git a/cps-rest/pom.xml b/cps-rest/pom.xml index 9e29074f7..c4af3803b 100755 --- a/cps-rest/pom.xml +++ b/cps-rest/pom.xml @@ -15,6 +15,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + SPDX-License-Identifier: Apache-2.0 ============LICENSE_END========================================================= --> @@ -66,10 +68,6 @@ io.swagger.core.v3 swagger-annotations - - io.springfox - springfox-boot-starter - org.springdoc springdoc-openapi-ui @@ -130,11 +128,12 @@ swagger-codegen-maven-plugin + code-gen generate - ${project.basedir}/src/main/resources/static/openapi.yml + ${project.basedir}/docs/openapi/openapi.yml org.onap.cps.rest.controller org.onap.cps.rest.model org.onap.cps.rest.api @@ -150,6 +149,29 @@ + + maven-resources-plugin + + + copy-resources + compile + + copy-resources + + + ${project.basedir}/target/classes/static/api-docs/cps-core + + + ${project.basedir}/target/generated-sources/swagger/ + + openapi.yaml + + + + + + + diff --git a/cps-rest/src/main/java/org/onap/cps/config/CpsConfig.java b/cps-rest/src/main/java/org/onap/cps/config/CpsConfig.java index 5793d9536..4f4501afb 100755 --- a/cps-rest/src/main/java/org/onap/cps/config/CpsConfig.java +++ b/cps-rest/src/main/java/org/onap/cps/config/CpsConfig.java @@ -26,27 +26,11 @@ import org.modelmapper.ModelMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.retry.annotation.EnableRetry; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; @Configuration @EnableRetry public class CpsConfig { - /** - * Swagger configuration. - */ - @Bean("cps-docket") - public Docket api() { - return new Docket(DocumentationType.OAS_30) - .groupName("cps-docket") - .select() - .apis(RequestHandlerSelectors.any()) - .paths(PathSelectors.any()).build(); - } - /** * ModelMapper configuration. */ diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java index a1287b2bd..55fdbbe87 100755 --- a/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java +++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java @@ -1,7 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation - * Modifications Copyright (C) 2020 Bell Canada. + * Modifications Copyright (C) 2020-2021 Bell Canada. * Modifications Copyright (C) 2021 Pantheon.tech * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -70,17 +70,6 @@ public class AdminRestController implements CpsAdminApi { return new ResponseEntity<>(dataspaceName, HttpStatus.CREATED); } - /** - * Delete a dataspace based on a given name. - * - * @param dataspaceName dataspace name - * @return a {@Link ResponseEntity} of {@link HttpStatus} NOT_IMPLEMENTED - */ - @Override - public ResponseEntity deleteDataspace(final String dataspaceName) { - return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); - } - /** * Create a {@link SchemaSet}. * diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java index 0e2050e5c..7db4e5a1b 100755 --- a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java +++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java @@ -67,11 +67,6 @@ public class DataRestController implements CpsDataApi { return new ResponseEntity<>(HttpStatus.CREATED); } - @Override - public ResponseEntity getNodesByDataspace(final String dataspaceName) { - return null; - } - @Override public ResponseEntity getNodeByDataspaceAndAnchor(final String dataspaceName, final String anchorName, final String xpath, final Boolean includeDescendants) { diff --git a/cps-rest/src/main/resources/static/components.yml b/cps-rest/src/main/resources/static/components.yml deleted file mode 100644 index 75a6f99fc..000000000 --- a/cps-rest/src/main/resources/static/components.yml +++ /dev/null @@ -1,216 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= - -components: - schemas: - - AnchorDetails: - type: object - title: Anchor details by anchor Name - properties: - name: - type: string - example: my_anchor - dataspaceName: - type: string - example: my_dataspace - schemaSetName: - type: string - example: my_schema_set - - ErrorMessage: - type: object - title: Error - properties: - status: - type: string - example: 400 - message: - type: string - example: Dataspace not found - details: - type: string - example: Dataspace with name D1 does not exist. - - MultipartFile: - required: - - file - properties: - multipartFile: - type: string - description: multipartFile - format: binary - example: http://example.com/examples/example.yang - - ModuleReferences: - type: object - title: Module reference object - properties: - name: - type: string - example: module_reference_name - namespace: - type: string - example: module_reference_namespace - revision: - type: string - example: module_reference_revision - - SchemaSetDetails: - type: object - title: Schema set details by dataspace and schemasetName - properties: - dataspaceName: - type: string - example: my_dataspace - moduleReferences: - type: array - items: - $ref: '#/components/schemas/ModuleReferences' - name: - type: string - example: my_schema_set - - parameters: - dataspaceNameInQuery: - name: dataspace-name - in: query - description: dataspace-name - required: true - schema: - type: string - dataspaceNameInPath: - name: dataspace-name - in: path - description: dataspace-name - required: true - schema: - type: string - anchorNameInPath: - name: anchor-name - in: path - description: anchor-name - required: true - schema: - type: string - schemaSetNameInQuery: - name: schema-set-name - in: query - description: schema-set-name - required: true - schema: - type: string - schemaSetNameInPath: - name: schema-set-name - in: path - description: schema-set-name - required: true - schema: - type: string - anchorNameInQuery: - name: anchor-name - in: query - description: anchor-name - required: true - schema: - type: string - xpathInQuery: - name: xpath - in: query - description: xpath - required: false - schema: - type: string - default: / - requiredXpathInQuery: - name: xpath - in: query - description: xpath - required: true - schema: - type: string - cpsPathInQuery: - name: cps-path - in: query - description: cps-path - required: false - schema: - type: string - default: / - includeDescendantsOptionInQuery: - name: include-descendants - in: query - description: include-descendants - required: false - schema: - type: boolean - default: false - observedTimestampInQuery: - name: observed-timestamp - in: query - description: observed-timestamp - required: false - schema: - type: string - example: '2021-03-21T00:10:34.030-0100' - - responses: - NotFound: - description: The specified resource was not found - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Unauthorized: - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Forbidden: - description: Forbidden - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - BadRequest: - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Conflict: - description: Conflict - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Ok: - description: OK - content: - application/json: - schema: - type: object - example: { "key": "value" } - Created: - description: Created - content: - text/plain: - schema: - type: string - NoContent: - description: No Content - content: {} diff --git a/cps-rest/src/main/resources/static/cpsAdmin.yml b/cps-rest/src/main/resources/static/cpsAdmin.yml deleted file mode 100644 index 35b2e4ca6..000000000 --- a/cps-rest/src/main/resources/static/cpsAdmin.yml +++ /dev/null @@ -1,222 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= - -dataspaces: - post: - description: Create a new dataspace - tags: - - cps-admin - summary: Create a dataspace - operationId: createDataspace - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInQuery' - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -dataspaceByDataspaceName: - delete: - description: Delete the given dataspace - DRAFT - tags: - - cps-admin - summary: Delete a dataspace - operationId: deleteDataspace - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '204': - $ref: 'components.yml#/components/responses/NoContent' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - -schemaSet: - post: - description: Create a new schema set in the given dataspace - tags: - - cps-admin - summary: Create a schema set - operationId: createSchemaSet - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: 'components.yml#/components/schemas/MultipartFile' - - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -schemaSetBySchemaSetName: - get: - description: Read a schema set given a schema set name and a dataspace - tags: - - cps-admin - summary: Get a schema set - operationId: getSchemaSet - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: 'components.yml#/components/schemas/SchemaSetDetails' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - - delete: - description: Delete a schema set given a schema set name and a dataspace - tags: - - cps-admin - summary: Delete a schema set - operationId: deleteSchemaSet - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' - responses: - '204': - $ref: 'components.yml#/components/responses/NoContent' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '409': - $ref: 'components.yml#/components/responses/Conflict' - -anchorsByDataspace: - get: - description: Read all anchors, given a dataspace - tags: - - cps-admin - summary: Get anchors - operationId: getAnchors - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - responses: - '200': - description: OK - content: - application/json: - schema: - type: array - items: - $ref: 'components.yml#/components/schemas/AnchorDetails' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - - post: - description: Create a new anchor in the given dataspace - tags: - - cps-admin - summary: Create an anchor - operationId: createAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' - - $ref: 'components.yml#/components/parameters/anchorNameInQuery' - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -anchorByDataspaceAndAnchorName: - get: - description: Read an anchor given an anchor name and a dataspace - tags: - - cps-admin - summary: Get an anchor - operationId: getAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: 'components.yml#/components/schemas/AnchorDetails' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - - delete: - description: Delete an anchor given an anchor name and a dataspace - tags: - - cps-admin - summary: Delete an anchor - operationId: deleteAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - responses: - '204': - $ref: 'components.yml#/components/responses/NoContent' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' \ No newline at end of file diff --git a/cps-rest/src/main/resources/static/cpsData.yml b/cps-rest/src/main/resources/static/cpsData.yml deleted file mode 100644 index 77673cb0f..000000000 --- a/cps-rest/src/main/resources/static/cpsData.yml +++ /dev/null @@ -1,226 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= - -nodeByDataspaceAndAnchor: - get: - description: Get a node with an option to retrieve all the children for a given anchor and dataspace - tags: - - cps-data - summary: Get a node - operationId: getNodeByDataspaceAndAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' - responses: - '200': - description: OK - content: - application/json: - schema: - type: object - example: { "child": my_child,"leafList": "leafListElement1, leafListElement2", "leaf": my_leaf } - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - x-codegen-request-body-name: xpath - -listNodeByDataspaceAndAnchor: - post: - description: Add list-node child elements to existing node for a given anchor and dataspace - tags: - - cps-data - summary: Add list-node child element(s) under existing parent node - operationId: addListNodeElements - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' - - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - put: - description: Replace list-node child elements under existing node for a given anchor and dataspace - tags: - - cps-data - summary: Replace list-node child element(s) under existing parent node - operationId: replaceListNodeElements - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' - - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '200': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - delete: - description: Delete list-node child elements under existing node for a given anchor and dataspace - tags: - - cps-data - summary: Delete list-node child element(s) under existing parent node - operationId: deleteListNodeElements - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' - - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' - responses: - '204': - $ref: 'components.yml#/components/responses/NoContent' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -nodesByDataspaceAndAnchor: - post: - description: Create a node for a given anchor and dataspace - tags: - - cps-data - summary: Create a node - operationId: createNode - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - patch: - description: Update a data node leaves for a given dataspace and anchor and a parent node xpath - tags: - - cps-data - summary: Update node leaves - operationId: updateNodeLeaves - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - put: - description: Replace a node with descendants for a given dataspace, anchor and a parent node xpath - tags: - - cps-data - summary: Replace a node with descendants - operationId: replaceNode - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - -nodesByDataspace: - get: - description: Get all nodes for a given dataspace using an xpath or schema node identifier - DRAFT - tags: - - cps-data - summary: Get nodes - operationId: getNodesByDataspace - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - x-codegen-request-body-name: requestBody diff --git a/cps-rest/src/main/resources/static/cpsQuery.yml b/cps-rest/src/main/resources/static/cpsQuery.yml deleted file mode 100644 index f45f3f41a..000000000 --- a/cps-rest/src/main/resources/static/cpsQuery.yml +++ /dev/null @@ -1,42 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021 Nordix Foundation -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -nodesByDataspaceAndAnchorAndCpsPath: - get: - description: Query data nodes for the given dataspace and anchor using CPS path - tags: - - cps-query - summary: Query data nodes - operationId: getNodesByDataspaceAndAnchorAndCpsPath - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/cpsPathInQuery' - - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - x-codegen-request-body-name: xpath diff --git a/cps-rest/src/main/resources/static/openapi.yml b/cps-rest/src/main/resources/static/openapi.yml deleted file mode 100644 index 922cabb01..000000000 --- a/cps-rest/src/main/resources/static/openapi.yml +++ /dev/null @@ -1,77 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021 Nordix Foundation -# Modifications Copyright (C) 2021 Pantheon.tech -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -openapi: 3.0.1 -info: - title: ONAP Open API v3 Configuration Persistence Service - description: Configuration Persistence Service is a Model Driven Generic Database - version: "1.0.0" - contact: - name: ONAP - url: "https://onap.readthedocs.io" - email: "onap-discuss@lists.onap.org" - license: - name: "Apache 2.0" - url: "http://www.apache.org/licenses/LICENSE-2.0" - x-planned-retirement-date: "202212" - x-component: "Modeling" - x-logo: - url: "cps_logo.png" - -servers: - - url: /cps/api -tags: - - name: cps-admin - description: cps Admin - - name: cps-data - description: cps Data -paths: - - /v1/dataspaces: - $ref: 'cpsAdmin.yml#/dataspaces' - - /v1/dataspaces/{dataspace-name}: - $ref: 'cpsAdmin.yml#/dataspaceByDataspaceName' - - /v1/dataspaces/{dataspace-name}/anchors: - $ref: 'cpsAdmin.yml#/anchorsByDataspace' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}: - $ref: 'cpsAdmin.yml#/anchorByDataspaceAndAnchorName' - - /v1/dataspaces/{dataspace-name}/schema-sets: - $ref: 'cpsAdmin.yml#/schemaSet' - - /v1/dataspaces/{dataspace-name}/schema-sets/{schema-set-name}: - $ref: 'cpsAdmin.yml#/schemaSetBySchemaSetName' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/node: - $ref: 'cpsData.yml#/nodeByDataspaceAndAnchor' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes: - $ref: 'cpsData.yml#/nodesByDataspaceAndAnchor' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/list-nodes: - $ref: 'cpsData.yml#/listNodeByDataspaceAndAnchor' - - /v1/dataspaces/{dataspace-name}/nodes: - $ref: 'cpsData.yml#/nodesByDataspace' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query: - $ref: 'cpsQuery.yml#/nodesByDataspaceAndAnchorAndCpsPath' diff --git a/cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy index 6c589b1bb..fc96f0447 100644 --- a/cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation + * Modifications Copyright (C) 2021 Bell Canada. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,7 +23,6 @@ package org.onap.cps.config import org.modelmapper.ModelMapper import spock.lang.Specification -import springfox.documentation.spring.web.plugins.Docket class CpsConfigSpec extends Specification { def objectUnderTest = new CpsConfig() @@ -31,9 +31,4 @@ class CpsConfigSpec extends Specification { expect: 'the CPS configuration has a Model Mapper' objectUnderTest.modelMapper() instanceof ModelMapper } - - def 'CPS configuration has a Docket API'() { - expect: 'the CPS configuration has a Docket API' - objectUnderTest.api() instanceof Docket - } } diff --git a/docker-compose/README.md b/docker-compose/README.md index ceb05446b..ae2686822 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -103,8 +103,9 @@ Here are the steps to run or debug the application from Intellij: Swagger UI and Open API specifications are available to discover service endpoints and send requests. -* `http://localhost:/swagger-ui/index.html` -* `http://localhost:/v3/api-docs?group=cps-docket` +* `http://localhost:/swagger-ui.html` +* `http://localhost:/api-docs/cps-core/openapi.yaml` +* `http://localhost:/api-docs/cps-ncmp/openapi.yaml` with being either `8080` if running the plain Java build or retrieved using following command if running from `docker-compose`: diff --git a/docs/api/swagger/openapi.yml b/docs/api/swagger/openapi.yml index c00d6ff6c..4d64b01b8 100755 --- a/docs/api/swagger/openapi.yml +++ b/docs/api/swagger/openapi.yml @@ -1,5 +1,6 @@ # ============LICENSE_START======================================================= # Copyright (C) 2021 Nordix Foundation +# Modifications Copyright (C) 2021 Bell Canada. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -339,10 +340,11 @@ paths: content: multipart/form-data: schema: + type: object required: - file properties: - multipartFile: + file: type: string description: multipartFile format: binary -- cgit 1.2.3-korg