+ @Override
+ public ResponseEntity<Object> updateNodeLeaves(final String dataspaceName,
+ final String anchorName, final Object jsonData, final String parentNodeXpath, final String observedTimestamp) {
+ cpsDataService.updateNodeLeaves(dataspaceName, anchorName, parentNodeXpath,
+ jsonObjectMapper.asJsonString(jsonData), toOffsetDateTime(observedTimestamp));
+ return new ResponseEntity<>(HttpStatus.OK);
+ }
+
+ @Override
+ public ResponseEntity<Object> replaceNode(final String dataspaceName, final String anchorName,
+ final Object jsonData, final String parentNodeXpath, final String observedTimestamp) {
+ cpsDataService
+ .replaceNodeTree(dataspaceName, anchorName, parentNodeXpath,
+ jsonObjectMapper.asJsonString(jsonData), toOffsetDateTime(observedTimestamp));
+ return new ResponseEntity<>(HttpStatus.OK);
+ }
+
+ @Override
+ public ResponseEntity<Object> replaceListContent(final String parentNodeXpath,
+ final String dataspaceName, final String anchorName, final Object jsonData,
+ final String observedTimestamp) {
+ cpsDataService.replaceListContent(dataspaceName, anchorName, parentNodeXpath,
+ jsonObjectMapper.asJsonString(jsonData), toOffsetDateTime(observedTimestamp));
+ return new ResponseEntity<>(HttpStatus.OK);
+ }
+
+ @Override
+ public ResponseEntity<Void> deleteListOrListElement(final String dataspaceName, final String anchorName,
+ final String listElementXpath, final String observedTimestamp) {
+ cpsDataService
+ .deleteListOrListElement(dataspaceName, anchorName, listElementXpath, toOffsetDateTime(observedTimestamp));
+ return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+ }
+
+ private static boolean isRootXpath(final String xpath) {
+ return ROOT_XPATH.equals(xpath);
+ }
+
+ private static OffsetDateTime toOffsetDateTime(final String datetTimestamp) {
+ try {
+ return StringUtils.isEmpty(datetTimestamp)
+ ? null : OffsetDateTime.parse(datetTimestamp, ISO_TIMESTAMP_FORMATTER);
+ } catch (final Exception exception) {
+ throw new ValidationException(
+ String.format("observed-timestamp must be in '%s' format", ISO_TIMESTAMP_FORMAT));
+ }
+ }