Merge "Fix for get anchor identifiers by module names"
authorToine Siebelink <toine.siebelink@est.tech>
Tue, 9 Nov 2021 10:57:21 +0000 (10:57 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 9 Nov 2021 10:57:21 +0000 (10:57 +0000)
cps-ncmp-rest/docs/openapi/ncmp.yml
cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java
cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java
cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java
cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java
docs/cps-path.rst
docs/deployment.rst
docs/design.rst
docs/modeling.rst

index 9e3560a..611e84e 100755 (executable)
@@ -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
index ca661b8..19b9a09 100755 (executable)
@@ -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.
index a609cfa..4066fd3 100644 (file)
@@ -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()
+    }
 }
 
index e5df9c5..b1bd03c 100755 (executable)
@@ -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);
index 8dc6c2f..c616c8f 100644 (file)
@@ -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);
index 4640a0f..faff7b6 100755 (executable)
@@ -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());
     }
 }
index b717a2b..db10c88 100755 (executable)
@@ -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));
     }
 }
index 5834d68..bc46681 100644 (file)
@@ -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).
index b1839cb..2f68a64 100644 (file)
@@ -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``                     |
 |                                       |                                                                                                         |                               |
index 02836c5..eb5f6b6 100755 (executable)
@@ -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
 ========
index 5504bf3..b750c6d 100644 (file)
@@ -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: