From: Ruslan Kashapov Date: Fri, 7 May 2021 07:46:27 +0000 (+0300) Subject: Create list-node elements (part3): NCMP REST and service layers X-Git-Tag: 1.1.0~53 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=1baf48d05be1cd32e22c065ebfec218da100d1f2;p=cps.git Create list-node elements (part3): NCMP REST and service layers Issue-ID: CPS-360 Change-Id: Id8be89f19750d72bae334491aea4a59f21c7ecd6 Signed-off-by: Ruslan Kashapov --- diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml index 69c37ad7a..5ff30994f 100644 --- a/cps-ncmp-rest/docs/openapi/components.yaml +++ b/cps-ncmp-rest/docs/openapi/components.yaml @@ -1,5 +1,6 @@ # ============LICENSE_START======================================================= # Modification (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. @@ -52,6 +53,13 @@ components: schema: type: string default: / + requiredXpathInQuery: + name: xpath + in: query + description: xpath + required: true + schema: + type: string includeDescendantsOptionInQuery: name: include-descendants in: query diff --git a/cps-ncmp-rest/docs/openapi/ncmproxy.yml b/cps-ncmp-rest/docs/openapi/ncmproxy.yml index d5358cc5d..00e0cc78f 100755 --- a/cps-ncmp-rest/docs/openapi/ncmproxy.yml +++ b/cps-ncmp-rest/docs/openapi/ncmproxy.yml @@ -141,5 +141,33 @@ nodesByCmHandleAndXpath: $ref: 'components.yaml#/components/responses/Unauthorized' 403: $ref: 'components.yaml#/components/responses/Forbidden' + 404: + $ref: 'components.yaml#/components/responses/NotFound' + +listNodeByCmHandleAndXpath: + post: + description: Add one or more list-node child elements under existing node for the given CM Handle + tags: + - network-cm-proxy + summary: Add list-node child element(s) + operationId: addListNodeElements + parameters: + - $ref: 'components.yaml#/components/parameters/cmHandleInPath' + - $ref: 'components.yaml#/components/parameters/requiredXpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + 201: + $ref: 'components.yaml#/components/responses/Created' + 400: + $ref: 'components.yaml#/components/responses/BadRequest' + 401: + $ref: 'components.yaml#/components/responses/Unauthorized' + 403: + $ref: 'components.yaml#/components/responses/Forbidden' 404: $ref: 'components.yaml#/components/responses/NotFound' \ No newline at end of file diff --git a/cps-ncmp-rest/docs/openapi/openapi.yml b/cps-ncmp-rest/docs/openapi/openapi.yml index 7575022f8..862837ea2 100755 --- a/cps-ncmp-rest/docs/openapi/openapi.yml +++ b/cps-ncmp-rest/docs/openapi/openapi.yml @@ -1,5 +1,6 @@ # ============LICENSE_START======================================================= # Modification (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. @@ -26,6 +27,9 @@ paths: /v1/cm-handles/{cm-handle}/node: $ref: 'ncmproxy.yml#/nodeByCmHandleAndXpath' + /v1/cm-handles/{cm-handle}/list-node: + $ref: 'ncmproxy.yml#/listNodeByCmHandleAndXpath' + /v1/cm-handles/{cm-handle}/nodes/query: $ref: 'ncmproxy.yml#/nodesByCmHandleAndCpsPath' diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java index 3c8a04e82..484a21ae6 100755 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java @@ -53,6 +53,13 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { return new ResponseEntity<>(HttpStatus.CREATED); } + @Override + public ResponseEntity addListNodeElements(final String jsonData, final String parentNodeXpath, + final String cmHandle) { + networkCmProxyDataService.addListNodeElements(cmHandle, parentNodeXpath, jsonData); + return new ResponseEntity<>(HttpStatus.CREATED); + } + @Override public ResponseEntity getNodeByCmHandleAndXpath(final String cmHandle, @Valid final String xpath, @Valid final Boolean includeDescendants) { 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 ea3c16d4c..45e8f1194 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 @@ -105,6 +105,23 @@ class NetworkCmProxyControllerSpec extends Specification { 'parent node xpath' | '/xpath' || '/xpath' } + def 'Add list-node elements.'() { + given: 'json data and parent node xpath' + def jsonData = 'json data' + def parentNodeXpath = 'parent node xpath' + when: 'post request is performed' + def response = mvc.perform( + post("$dataNodeBaseEndpoint/cm-handles/$cmHandle/list-node") + .contentType(MediaType.APPLICATION_JSON) + .content(jsonData) + .param('xpath', parentNodeXpath) + ).andReturn().response + then: 'the service method is invoked once with expected parameters' + 1 * mockNetworkCmProxyDataService.addListNodeElements(cmHandle, parentNodeXpath, jsonData) + and: 'response status indicates success' + response.status == HttpStatus.CREATED.value() + } + def 'Update data node leaves.'() { given: 'json data' def jsonData = 'json data' diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java index 8176ea50f..ccc4e44cc 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java @@ -67,6 +67,16 @@ public interface NetworkCmProxyDataService { */ void createDataNode(@NonNull String cmHandle, @NonNull String parentNodeXpath, @NonNull String jsonData); + /** + * Creates one or more child node elements with descendants under existing node from list-node data fragment. + * + * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm + * object managed by Network CM Proxy + * @param parentNodeXpath xpath to parent node + * @param jsonData data as JSON string + */ + void addListNodeElements(@NonNull String cmHandle, @NonNull String parentNodeXpath, @NonNull String jsonData); + /** * Updates data node for given cm handle using xpath to parent node. * diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java index 56f4cf8dc..bdb71bf62 100755 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java @@ -67,6 +67,11 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService } } + @Override + public void addListNodeElements(final String cmHandle, final String parentNodeXpath, final String jsonData) { + cpsDataService.saveListNodeData(getDataspaceName(), cmHandle, parentNodeXpath, jsonData); + } + @Override public void updateNodeLeaves(final String cmHandle, final String parentNodeXpath, final String jsonData) { cpsDataService.updateNodeLeaves(getDataspaceName(), cmHandle, parentNodeXpath, jsonData); diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy index 0a00e34f7..e67d4ad85 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy @@ -73,6 +73,16 @@ class NetworkCmProxyDataServiceImplSpec extends Specification { 1 * mockcpsDataService.saveData(expectedDataspaceName, cmHandle, xpath, jsonData) } + def 'Add list-node elements.'() { + given: 'a cm handle and parent node xpath' + def jsonData = 'some json' + def xpath = '/test-node' + when: 'addListNodeElements is invoked' + objectUnderTest.addListNodeElements(cmHandle, xpath, jsonData) + then: 'the CPS service method is invoked once with the expected parameters' + 1 * mockcpsDataService.saveListNodeData(expectedDataspaceName, cmHandle, xpath, jsonData) + } + def 'Update data node leaves.'() { given: 'a cm Handle and a cps path' def xpath = '/xpath'