diff options
author | danielhanrahan <daniel.hanrahan@est.tech> | 2023-09-28 11:13:36 +0100 |
---|---|---|
committer | danielhanrahan <daniel.hanrahan@est.tech> | 2023-09-28 11:13:36 +0100 |
commit | d8620d2bceab3001543d795b3d44925377d00cf1 (patch) | |
tree | ebfa0b1cb14a365488098fd96bb0ba1674b99f97 /cps-service/src/main | |
parent | b4939f3dc286b23edd6f7950e74952208f983eb4 (diff) |
JSON list support when updating multiple datanodes
updateDataNodesAndDescendants if supplied with a JSON list such as
{"branch": [{"name":"Name1"}, {"name":"Name2"}]}
would only replace the first node /test-tree/branch[@name='Name1'],
and ignore any remaining list items. This is caused by the use of a
legacy buildDataNode, which returns only a single DataNode from JSON,
even if the JSON contained a list.
Issue-ID: CPS-1889
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: I257491b6bc3f047a64eb241eaac70fd457b24347
Diffstat (limited to 'cps-service/src/main')
-rwxr-xr-x | cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java | 27 |
1 files changed, 6 insertions, 21 deletions
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 7db87e87ea..1d68450f8a 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 @@ -31,6 +31,7 @@ import static org.onap.cps.notification.Operation.UPDATE; import io.micrometer.core.annotation.Timed; import java.io.Serializable; import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -321,28 +322,12 @@ public class CpsDataServiceImpl implements CpsDataService { processDataUpdatedEventAsync(anchor, listNodeXpath, DELETE, observedTimestamp); } - private DataNode buildDataNode(final Anchor anchor, final String parentNodeXpath, final String nodeData, - final ContentType contentType) { - final SchemaContext schemaContext = getSchemaContext(anchor); - - if (ROOT_NODE_XPATH.equals(parentNodeXpath)) { - final ContainerNode containerNode = timedYangParser.parseData(contentType, nodeData, schemaContext); - return new DataNodeBuilder().withContainerNode(containerNode).build(); - } - - final ContainerNode containerNode = - timedYangParser.parseData(contentType, nodeData, schemaContext, parentNodeXpath); - - return new DataNodeBuilder() - .withParentNodeXpath(parentNodeXpath) - .withContainerNode(containerNode) - .build(); - } - private Collection<DataNode> buildDataNodes(final Anchor anchor, final Map<String, String> nodesJsonData) { - return nodesJsonData.entrySet().stream().map(nodeJsonData -> - buildDataNode(anchor, nodeJsonData.getKey(), - nodeJsonData.getValue(), ContentType.JSON)).collect(Collectors.toList()); + final Collection<DataNode> dataNodes = new ArrayList<>(); + for (final Map.Entry<String, String> nodeJsonData : nodesJsonData.entrySet()) { + dataNodes.addAll(buildDataNodes(anchor, nodeJsonData.getKey(), nodeJsonData.getValue(), ContentType.JSON)); + } + return dataNodes; } private Collection<DataNode> buildDataNodes(final Anchor anchor, final String parentNodeXpath, |