diff options
author | Ruslan Kashapov <ruslan.kashapov@pantheon.tech> | 2021-04-22 11:47:41 +0300 |
---|---|---|
committer | Rishi Chail <rishi.chail@est.tech> | 2021-04-29 16:21:02 +0000 |
commit | 6da081cc0667795cd7872582a8795cf0bbd56c17 (patch) | |
tree | 0e2a35e6481d463a1b925a40f13d9fe352d06d86 | |
parent | 8a74ced574d566024513044859f433d263e3cc1b (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.java | 20 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy | 22 |
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 -> { |