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
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.
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()
+ }
}
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;
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);
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,
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);
@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());
}
}
public class DataNodeNotFoundException extends DataValidationException {
private static final long serialVersionUID = 7786740001662205407L;
-
+ private static final String DATANODE_NOT_FOUND = "DataNode not found";
/**
* Constructor.
*
* @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));
}
* @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));
}
* @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));
}
}
- ``/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).
| | | |
| | 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`` |
+---------------------------------------+---------------------------------------------------------------------------------------------------------+-------------------------------+
| | | |
| | 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`` |
+---------------------------------------+---------------------------------------------------------------------------------------------------------+-------------------------------+
| | | |
| | 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`` |
| | | |
* 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
========
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: