summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuslan Kashapov <ruslan.kashapov@pantheon.tech>2021-04-22 11:47:41 +0300
committerRishi Chail <rishi.chail@est.tech>2021-04-29 16:21:02 +0000
commit6da081cc0667795cd7872582a8795cf0bbd56c17 (patch)
tree0e2a35e6481d463a1b925a40f13d9fe352d06d86
parent8a74ced574d566024513044859f433d263e3cc1b (diff)
JSON data fragment into DataNode collection parsing support
Issue-ID: CPS-358 Change-Id: I92f46504e5f3623131844616945069f70712ed61 Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java20
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy22
2 files changed, 41 insertions, 1 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
index 253d4c6242..6530e724e9 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
@@ -119,6 +119,19 @@ public class DataNodeBuilder {
}
}
+ /**
+ * To build a {@link Collection} of {@link DataNode} objects.
+ *
+ * @return {@link DataNode} {@link Collection}
+ */
+ public Collection<DataNode> buildCollection() {
+ if (normalizedNodeTree != null) {
+ return buildCollectionFromNormalizedNodeTree();
+ } else {
+ return ImmutableSet.of(buildFromAttributes());
+ }
+ }
+
private DataNode buildFromAttributes() {
final var dataNode = new DataNode();
dataNode.setXpath(xpath);
@@ -128,9 +141,14 @@ public class DataNodeBuilder {
}
private DataNode buildFromNormalizedNodeTree() {
+ final Collection<DataNode> dataNodeCollection = buildCollectionFromNormalizedNodeTree();
+ return dataNodeCollection.iterator().next();
+ }
+
+ private Collection<DataNode> buildCollectionFromNormalizedNodeTree() {
final var parentDataNode = new DataNodeBuilder().withXpath(parentNodeXpath).build();
addDataNodeFromNormalizedNode(parentDataNode, normalizedNodeTree);
- return parentDataNode.getChildDataNodes().iterator().next();
+ return parentDataNode.getChildDataNodes();
}
private static void addDataNodeFromNormalizedNode(final DataNode currentDataNode,
diff --git a/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy
index 901e0b60ce..7f50f7f524 100644
--- a/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy
@@ -83,6 +83,7 @@ class DataNodeBuilderSpec extends Specification {
mappedResult.keySet()
.containsAll(['/test-tree/branch[@name=\'Branch\']', '/test-tree/branch[@name=\'Branch\']/nest'])
}
+
def 'Converting NormalizedNode (tree) to a DataNode (tree) -- augmentation case.'() {
given: 'a schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(networkTopologyModelRfc8345)
@@ -133,6 +134,27 @@ class DataNodeBuilderSpec extends Specification {
assert result.leaves['source-tp'] == '1-2-1'
}
+ def 'Converting NormalizedNode into DataNode collection: #scenario.'() {
+ given: 'a schema context for expected model'
+ def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ and: 'parent node xpath referencing parent of list-node element'
+ def parentNodeXpath = "/test-tree"
+ and: 'the json data fragment (list-node element) parsed into normalized node object'
+ def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath)
+ when: 'the normalized node is converted to a data node collection'
+ def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode)
+ .withParentNodeXpath(parentNodeXpath).buildCollection()
+ def resultXpaths = result.collect { it.getXpath() }
+ then: 'the resulting collection contains data nodes for expected list elements'
+ assert resultXpaths.size() == expectedSize
+ assert resultXpaths.containsAll(expectedXpaths)
+ where: 'following parameters are used'
+ scenario | jsonData | expectedSize | expectedXpaths
+ 'single entry' | '{"branch": [{"name": "One"}]}' | 1 | ['/test-tree/branch[@name=\'One\']']
+ 'multiple entries' | '{"branch": [{"name": "One"}, {"name": "Two"}]}' | 2 | ['/test-tree/branch[@name=\'One\']', '/test-tree/branch[@name=\'Two\']']
+ }
+
def static assertLeavesMaps(actualLeavesMap, expectedLeavesMap) {
expectedLeavesMap.each { key, value ->
{