From: Toine Siebelink Date: Tue, 9 Nov 2021 10:57:21 +0000 (+0000) Subject: Merge "Fix for get anchor identifiers by module names" X-Git-Tag: mr/823/126723/7~34 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=7a9e0f81770f2aa2793e241cee3a3c6c9bb40d9d;hp=6804157f3ee5b1268e53ae86e4767ee267d48eec;p=cps.git Merge "Fix for get anchor identifiers by module names" --- diff --git a/cps-ncmp-rest/docs/openapi/ncmp.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml index 9e3560a2f..611e84e01 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 ca661b817..19b9a09da 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 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 a609cfacb..4066fd35e 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 e5df9c5ca..b1bd03c25 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 inputModuleNames) { final Collection 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 8dc6c2f69..c616c8fac 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 4640a0fb3..faff7b611 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 queryAnchorNames(final String dataspaceName, final Collection moduleNames) { final Collection 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 b717a2b18..db10c88b9 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 5834d68e1..bc46681d1 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 b1839cbb8..2f68a64ee 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 02836c5f3..eb5f6b6e0 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 `_. + More information on the DMI-Plugins offered APIs can be found on the :ref:`DMI-Plugin's Design Page `. CPS Path ======== diff --git a/docs/modeling.rst b/docs/modeling.rst index 5504bf322..b750c6d5b 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: