diff options
author | Ruslan Kashapov <ruslan.kashapov@pantheon.tech> | 2021-02-09 17:25:18 +0200 |
---|---|---|
committer | Ruslan Kashapov <ruslan.kashapov@pantheon.tech> | 2021-02-18 11:54:36 +0200 |
commit | 24c72db6b3674bde16eb5a7313d71f507a880de9 (patch) | |
tree | c6eb5a55e544954782cc0fdab820c26ed81ed8d2 /cps-service/src/main/java/org | |
parent | 6d13f166f2e3d1c357677ad6f37f6e35238aeac6 (diff) |
Data fragment update by xpath #3 - rest and service layers
Issue-ID: CPS-58
Change-Id: Ie224da95b07748b63648226df6484cebae91cdec
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
Diffstat (limited to 'cps-service/src/main/java/org')
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/api/CpsDataService.java | 21 | ||||
-rwxr-xr-x | cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java | 50 |
2 files changed, 62 insertions, 9 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java index 7960d12ef0..54d9258918 100644 --- a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java +++ b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java @@ -53,4 +53,25 @@ public interface CpsDataService { DataNode getDataNode(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String xpath, @NonNull FetchDescendantsOption fetchDescendantsOption); + /** + * Updates data node for given dataspace and anchor using xpath to parent node. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + * @param parentNodeXpath xpath to parent node + * @param jsonData json data + */ + void updateNodeLeaves(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String parentNodeXpath, + @NonNull String jsonData); + + /** + * Replaces existing data node content including descendants. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + * @param parentNodeXpath xpath to parent node + * @param jsonData json data + */ + void replaceNodeTree(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String parentNodeXpath, + @NonNull String jsonData); } diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java index d7d25b98b9..6f7d6439b6 100755 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java @@ -38,6 +38,8 @@ import org.springframework.stereotype.Service; @Service public class CpsDataServiceImpl implements CpsDataService { + private static final String ROOT_NODE_XPATH = "/"; + @Autowired private CpsDataPersistenceService cpsDataPersistenceService; @@ -52,15 +54,8 @@ public class CpsDataServiceImpl implements CpsDataService { @Override public void saveData(final String dataspaceName, final String anchorName, final String jsonData) { - final Anchor anchor = cpsAdminService.getAnchor(dataspaceName, anchorName); - final SchemaContext schemaContext = getSchemaContext(dataspaceName, anchor.getSchemaSetName()); - final NormalizedNode<?, ?> normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext); - final DataNode dataNode = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode).build(); - cpsDataPersistenceService.storeDataNode(dataspaceName, anchor.getName(), dataNode); - } - - private SchemaContext getSchemaContext(final String dataspaceName, final String schemaSetName) { - return yangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName).getSchemaContext(); + final DataNode dataNode = buildDataNodeFromJson(dataspaceName, anchorName, ROOT_NODE_XPATH, jsonData); + cpsDataPersistenceService.storeDataNode(dataspaceName, anchorName, dataNode); } @Override @@ -68,4 +63,41 @@ public class CpsDataServiceImpl implements CpsDataService { final FetchDescendantsOption fetchDescendantsOption) { return cpsDataPersistenceService.getDataNode(dataspaceName, anchorName, xpath, fetchDescendantsOption); } + + @Override + public void updateNodeLeaves(final String dataspaceName, final String anchorName, final String parentNodeXpath, + final String jsonData) { + final DataNode dataNode = buildDataNodeFromJson(dataspaceName, anchorName, parentNodeXpath, jsonData); + cpsDataPersistenceService + .updateDataLeaves(dataspaceName, anchorName, dataNode.getXpath(), dataNode.getLeaves()); + } + + @Override + public void replaceNodeTree(final String dataspaceName, final String anchorName, final String parentNodeXpath, + final String jsonData) { + final DataNode dataNode = buildDataNodeFromJson(dataspaceName, anchorName, parentNodeXpath, jsonData); + cpsDataPersistenceService.replaceDataNodeTree(dataspaceName, anchorName, dataNode); + } + + private DataNode buildDataNodeFromJson(final String dataspaceName, final String anchorName, + final String parentNodeXpath, final String jsonData) { + + final Anchor anchor = cpsAdminService.getAnchor(dataspaceName, anchorName); + final SchemaContext schemaContext = getSchemaContext(dataspaceName, anchor.getSchemaSetName()); + + if (ROOT_NODE_XPATH.equals(parentNodeXpath)) { + final NormalizedNode<?, ?> normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext); + return new DataNodeBuilder().withNormalizedNodeTree(normalizedNode).build(); + } + + final NormalizedNode<?, ?> normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath); + return new DataNodeBuilder() + .withParentNodeXpath(parentNodeXpath) + .withNormalizedNodeTree(normalizedNode) + .build(); + } + + private SchemaContext getSchemaContext(final String dataspaceName, final String schemaSetName) { + return yangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName).getSchemaContext(); + } }
\ No newline at end of file |