diff options
11 files changed, 72 insertions, 15 deletions
diff --git a/cps-ncmp-rest/docs/openapi/ncmp.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml index 9e3560a2fa..611e84e01e 100755 --- a/cps-ncmp-rest/docs/openapi/ncmp.yml +++ b/cps-ncmp-rest/docs/openapi/ncmp.yml @@ -258,6 +258,37 @@ resourceDataForPassthroughRunning: 404: $ref: 'components.yaml#/components/responses/NotFound' + put: + tags: + - network-cm-proxy + summary: Update resource data from pass-through running for a cm handle + description: Update resource data from pass-through running for the given cm handle + operationId: updateResourceDataRunningForCmHandle + parameters: + - $ref: 'components.yaml#/components/parameters/cmHandleInPath' + - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery' + - $ref: 'components.yaml#/components/parameters/contentParamInHeader' + requestBody: + required: true + content: + application/json: + schema: + type: string + application/yang-data+json: + schema: + type: string + responses: + 200: + $ref: 'components.yaml#/components/responses/Ok' + 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' + fetchModuleReferencesByCmHandle: get: description: fetch all module references (name and revision) for a given cm handle 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 ca661b817e..19b9a09daa 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 @@ -132,6 +132,12 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { return new ResponseEntity<>(HttpStatus.OK); } + @Override + public ResponseEntity<Object> updateResourceDataRunningForCmHandle(final String cmHandle, + final String resourceIdentifier, final String requestBody, final String contentType) { + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + } + /** * Update Node Leaves. * @deprecated This Method is no longer used as part of NCMP. 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 a609cfacb8..4066fd35eb 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 @@ -281,5 +281,19 @@ class NetworkCmProxyControllerSpec extends Specification { then: 'an empty cm handle identifier is returned' response.contentAsString == '{"cmHandles":null}' } + + def 'Update resource data in passthrough-running datastore.' () { + given: 'update resource data url' + def updateUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + + "?resourceIdentifier=parent/child" + when: 'update data resource request is performed' + def response = mvc.perform( + put(updateUrl) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE).content('some-request-body') + ).andReturn().response + then: 'the response status is not implemented' + response.status == HttpStatus.NOT_IMPLEMENTED.value() + } } diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java index e5df9c5cab..b1bd03c255 100755 --- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java @@ -30,6 +30,7 @@ import javax.transaction.Transactional; import org.onap.cps.spi.CpsAdminPersistenceService; import org.onap.cps.spi.entities.AnchorEntity; import org.onap.cps.spi.entities.DataspaceEntity; +import org.onap.cps.spi.entities.YangResourceModuleReference; import org.onap.cps.spi.exceptions.AlreadyDefinedException; import org.onap.cps.spi.exceptions.ModuleNamesNotFoundException; import org.onap.cps.spi.model.Anchor; @@ -132,7 +133,7 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic final Collection<String> inputModuleNames) { final Collection<String> retrievedModuleNames = yangResourceRepository.findAllModuleReferences(dataspaceName, inputModuleNames) - .stream().map(module -> module.getModuleName()) + .stream().map(YangResourceModuleReference::getModuleName) .collect(Collectors.toList()); if (retrievedModuleNames.isEmpty()) { dataspaceRepository.getByName(dataspaceName); diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java index 8dc6c2f69c..c616c8face 100644 --- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java @@ -91,7 +91,8 @@ public class CpsDataPersistenceServiceImpl implements CpsDataPersistenceService private static final Gson GSON = new GsonBuilder().create(); private static final String REG_EX_FOR_OPTIONAL_LIST_INDEX = "(\\[@[\\s\\S]+?]){0,1})"; - private static final String REG_EX_FOR_LIST_ELEMENT_KEY_PREDICATE = "\\[(\\@([^/]*?)){0,99}( and)*\\]$"; + private static final Pattern REG_EX_PATTERN_FOR_LIST_ELEMENT_KEY_PREDICATE = + Pattern.compile("\\[(\\@([^\\/]{0,9999}))\\]$"); @Override public void addChildDataNode(final String dataspaceName, final String anchorName, final String parentXpath, @@ -361,8 +362,7 @@ public class CpsDataPersistenceServiceImpl implements CpsDataPersistenceService final String parentNodeXpath = targetXpath.substring(0, targetXpath.lastIndexOf('/')); final FragmentEntity parentFragmentEntity = getFragmentByXpath(dataspaceName, anchorName, parentNodeXpath); final String lastXpathElement = targetXpath.substring(targetXpath.lastIndexOf('/')); - final boolean isListElement = Pattern.compile(REG_EX_FOR_LIST_ELEMENT_KEY_PREDICATE) - .matcher(lastXpathElement).find(); + final boolean isListElement = REG_EX_PATTERN_FOR_LIST_ELEMENT_KEY_PREDICATE.matcher(lastXpathElement).find(); boolean targetExist; if (isListElement) { targetExist = deleteDataNode(parentFragmentEntity, targetXpath); diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java index 4640a0fb31..faff7b611b 100755 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java @@ -64,6 +64,6 @@ public class CpsAdminServiceImpl implements CpsAdminService { @Override public Collection<String> queryAnchorNames(final String dataspaceName, final Collection<String> moduleNames) { final Collection<Anchor> anchors = cpsAdminPersistenceService.queryAnchors(dataspaceName, moduleNames); - return anchors.stream().map(anchor -> anchor.getName()).collect(Collectors.toList()); + return anchors.stream().map(Anchor::getName).collect(Collectors.toList()); } } diff --git a/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java index b717a2b183..db10c88b92 100755 --- a/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java +++ b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java @@ -27,7 +27,7 @@ package org.onap.cps.spi.exceptions; public class DataNodeNotFoundException extends DataValidationException { private static final long serialVersionUID = 7786740001662205407L; - + private static final String DATANODE_NOT_FOUND = "DataNode not found"; /** * Constructor. * @@ -36,9 +36,10 @@ public class DataNodeNotFoundException extends DataValidationException { * @param xpath datanode xpath * @param additionalInformation additional information */ + public DataNodeNotFoundException(final String dataspaceName, final String anchorName, final String xpath, final String additionalInformation) { - super("DataNode not found", String + super(DATANODE_NOT_FOUND, String .format("DataNode with xpath %s was not found for anchor %s and dataspace %s, %s.", xpath, anchorName, dataspaceName, additionalInformation)); } @@ -51,7 +52,7 @@ public class DataNodeNotFoundException extends DataValidationException { * @param xpath datanode xpath */ public DataNodeNotFoundException(final String dataspaceName, final String anchorName, final String xpath) { - super("DataNode not found", String + super(DATANODE_NOT_FOUND, String .format("DataNode with xpath %s was not found for anchor %s and dataspace %s.", xpath, anchorName, dataspaceName)); } @@ -63,7 +64,7 @@ public class DataNodeNotFoundException extends DataValidationException { * @param anchorName the anchor name */ public DataNodeNotFoundException(final String dataspaceName, final String anchorName) { - super("DataNode not found", String.format( + super(DATANODE_NOT_FOUND, String.format( "DataNode not found for anchor %s and dataspace %s.", anchorName, dataspaceName)); } } diff --git a/docs/cps-path.rst b/docs/cps-path.rst index 5834d68e1e..bc46681d1c 100644 --- a/docs/cps-path.rst +++ b/docs/cps-path.rst @@ -113,7 +113,7 @@ leaf-conditions - ``/shops/bookstore/categories[@numberOfBooks=1]`` - ``//categories[@name="Kids"]`` - ``//categories[@name='Kids']`` - - ``//categories[@code=1]/book[@title='Dune' and price=5]`` + - ``//categories[@code=1]/books/book[@title='Dune' and @price=5]`` **Limitations** - Only the last list or container can be queried leaf values. Any ancestor list will have to be referenced by its key name-value pair(s). diff --git a/docs/deployment.rst b/docs/deployment.rst index b1839cbb88..2f68a64ee1 100644 --- a/docs/deployment.rst +++ b/docs/deployment.rst @@ -177,7 +177,7 @@ exhaustive. | | | | | | If not defined, the password is generated when deploying the application. | | | | | | -| | See also :ref:`credentials_retrieval`. | | +| | See also :ref:`cps_common_credentials_retrieval`. | | +---------------------------------------+---------------------------------------------------------------------------------------------------------+-------------------------------+ | config.dmiPluginUserName | User name used by cps-core to authenticate themselves for using ncmp-dmi-plugin service. | ``dmiuser`` | +---------------------------------------+---------------------------------------------------------------------------------------------------------+-------------------------------+ @@ -185,7 +185,7 @@ exhaustive. | | | | | | If not defined, the password is generated when deploying the application. | | | | | | -| | See also :ref:`credentials_retrieval`. | | +| | See also :ref:`cps_common_credentials_retrieval`. | | +---------------------------------------+---------------------------------------------------------------------------------------------------------+-------------------------------+ | postgres.config.pgUserName | Internal user name used by cps-core to connect to its own database. | ``cps`` | +---------------------------------------+---------------------------------------------------------------------------------------------------------+-------------------------------+ @@ -193,7 +193,7 @@ exhaustive. | | | | | | If not defined, the password is generated when deploying the application. | | | | | | -| | See also :ref:`credentials_retrieval`. | | +| | See also :ref:`cps_common_credentials_retrieval`. | | +---------------------------------------+---------------------------------------------------------------------------------------------------------+-------------------------------+ | postgres.config.pgDatabase | Database name used by cps-core | ``cpsdb`` | | | | | diff --git a/docs/design.rst b/docs/design.rst index 02836c5f37..eb5f6b6e07 100755 --- a/docs/design.rst +++ b/docs/design.rst @@ -64,7 +64,7 @@ CPS Core uses API's from the following ONAP components * DMI-Plugin: REST based interface which is used to provide integration and allow the DMI registry API's have access to the corresponding NCMP API's within CPS Core. - More information on the DMI-Plugins offered APIs can be found on the `DMI-Plugin's Design Page <https://docs.onap.org/projects/onap-cps-ncmp-dmi-plugin/en/latest/design.html>`_. + More information on the DMI-Plugins offered APIs can be found on the :ref:`DMI-Plugin's Design Page <onap-cps-ncmp-dmi-plugin:design>`. CPS Path ======== diff --git a/docs/modeling.rst b/docs/modeling.rst index 5504bf322e..b750c6d5b3 100644 --- a/docs/modeling.rst +++ b/docs/modeling.rst @@ -54,7 +54,11 @@ Data Querying -- **CPS Path** is used to query data nodes. The CPS Path is described in detail in :doc:`cps-path`. +- **CPS Path** is used to query data nodes. +.. toctree:: + :maxdepth: 1 + + cps-path.rst .. Below Label is used by documentation for other CPS components to link here, do not remove even if it gives a warning .. _cps_ncmp_modelling: |