aboutsummaryrefslogtreecommitdiffstats
path: root/cps-service
diff options
context:
space:
mode:
Diffstat (limited to 'cps-service')
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java1
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java14
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java11
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/spi/model/DataNodeBuilderSpec.groovy17
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy28
5 files changed, 61 insertions, 10 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java b/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java
index 43aa06b81b..d80306bae8 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java
@@ -42,6 +42,7 @@ public class DataNode {
private String anchorName;
private ModuleReference moduleReference;
private String xpath;
+ private String moduleNamePrefix;
private Map<String, Object> leaves = Collections.emptyMap();
private Collection<String> xpathsChildren;
private Collection<DataNode> childDataNodes = Collections.emptySet();
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 4a9957deb4..f2bde03a01 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
@@ -2,6 +2,7 @@
* ============LICENSE_START=======================================================
* Copyright (C) 2021 Bell Canada. All rights reserved.
* Modifications Copyright (C) 2021 Pantheon.tech
+ * Modifications Copyright (C) 2022 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -45,6 +46,7 @@ public class DataNodeBuilder {
private NormalizedNode<?, ?> normalizedNodeTree;
private String xpath;
+ private String moduleNamePrefix;
private String parentNodeXpath = "";
private Map<String, Object> leaves = Collections.emptyMap();
private Collection<DataNode> childDataNodes = Collections.emptySet();
@@ -84,6 +86,17 @@ public class DataNodeBuilder {
}
/**
+ * To use module name for prefix for creating {@link DataNode}.
+ *
+ * @param moduleNamePrefix module name as prefix
+ * @return DataNodeBuilder
+ */
+ public DataNodeBuilder withModuleNamePrefix(final String moduleNamePrefix) {
+ this.moduleNamePrefix = moduleNamePrefix;
+ return this;
+ }
+
+ /**
* To use attributes for creating {@link DataNode}.
*
* @param leaves for the data node
@@ -136,6 +149,7 @@ public class DataNodeBuilder {
private DataNode buildFromAttributes() {
final var dataNode = new DataNode();
dataNode.setXpath(xpath);
+ dataNode.setModuleNamePrefix(moduleNamePrefix);
dataNode.setLeaves(leaves);
dataNode.setChildDataNodes(childDataNodes);
return dataNode;
diff --git a/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java b/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java
index 42719d9b3c..ff5204ff6c 100644
--- a/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java
+++ b/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java
@@ -1,7 +1,7 @@
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2021 Pantheon.tech
- * Modifications (C) 2021 Nordix Foundation
+ * Modifications (C) 2021-2022 Nordix Foundation
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@ public class DataMapUtils {
*/
public static Map<String, Object> toDataMapWithIdentifier(final DataNode dataNode) {
return ImmutableMap.<String, Object>builder()
- .put(getNodeIdentifier(dataNode.getXpath()), toDataMap(dataNode))
+ .put(getNodeIdentifierWithPrefix(dataNode.getXpath(), dataNode.getModuleNamePrefix()), toDataMap(dataNode))
.build();
}
@@ -96,6 +96,13 @@ public class DataMapUtils {
return toIndex > 0 ? xpath.substring(fromIndex, toIndex) : xpath.substring(fromIndex);
}
+ private static String getNodeIdentifierWithPrefix(final String xpath, final String moduleNamePrefix) {
+ if (moduleNamePrefix != null) {
+ return moduleNamePrefix + ":" + getNodeIdentifier(xpath);
+ }
+ return getNodeIdentifier(xpath);
+ }
+
private static boolean isContainerNode(final String xpath) {
return !isListElement(xpath);
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/spi/model/DataNodeBuilderSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/spi/model/DataNodeBuilderSpec.groovy
index ce54ead2a0..16d4efc273 100644
--- a/cps-service/src/test/groovy/org/onap/cps/spi/model/DataNodeBuilderSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/spi/model/DataNodeBuilderSpec.groovy
@@ -22,6 +22,7 @@ package org.onap.cps.spi.model
import org.onap.cps.TestUtils
import org.onap.cps.spi.model.DataNodeBuilder
+import org.onap.cps.utils.DataMapUtils
import org.onap.cps.utils.YangUtils
import org.onap.cps.yang.YangTextSchemaSourceSetBuilder
import org.opendaylight.yangtools.yang.common.QName
@@ -172,6 +173,22 @@ class DataNodeBuilderSpec extends Specification {
'NormalizedNode is an unsupported type' | 'not supported' | Mock(NormalizedNode) | 0 | [ ]
}
+ def 'Use of adding the module name prefix attribute of data node.'() {
+ when: 'data node is built with a prefix'
+ def testDataNode = new DataNodeBuilder()
+ .withModuleNamePrefix('sampleModuleNamePrefix')
+ .withXpath(xPath)
+ .withLeaves(sampleLeaves)
+ .build()
+ then: 'the result when node request is a #scenario includes the correct prefix'
+ def result = new DataMapUtils().toDataMapWithIdentifier(testDataNode)
+ result.toString() == expectedResult
+ where: 'the following parameters are used'
+ scenario | xPath | sampleLeaves | expectedResult
+ 'list attribute' | '/test-tree/branch[@name=\'Right\']/nest' | [name: 'Big', birds: ['Owl']] | '{sampleModuleNamePrefix:nest={name=Big, birds=[Owl]}}'
+ 'container xpath' | '/test-tree/branch[@name=\'Left\']' | [name: 'Left'] | '{sampleModuleNamePrefix:branch={name=Left}}'
+ }
+
def static assertLeavesMaps(actualLeavesMap, expectedLeavesMap) {
expectedLeavesMap.each { key, value ->
{
diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy
index 90563c0c16..24e8061b53 100644
--- a/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy
@@ -1,7 +1,7 @@
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2021 Pantheon.tech
- * Modifications Copyright (C) 2020 Nordix Foundation
+ * Modifications Copyright (C) 2020-2022 Nordix Foundation
* Modifications Copyright (C) 2022 Bell Canada.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,13 +29,13 @@ class DataMapUtilsSpec extends Specification {
def noChildren = []
def dataNode = buildDataNode(
- "/parent",[parentLeaf:'parentLeafValue', parentLeafList:['parentLeafListEntry1','parentLeafListEntry2']],[
- buildDataNode('/parent/child-list[@id=1]',[listElementLeaf:'listElement1leafValue'],noChildren),
- buildDataNode('/parent/child-list[@id=2]',[listElementLeaf:'listElement2leafValue'],noChildren),
- buildDataNode('/parent/child-object',[childLeaf:'childLeafValue'],
- [buildDataNode('/parent/child-object/grand-child-object',[grandChildLeaf:'grandChildLeafValue'],noChildren)]
- ),
- ])
+ "/parent",[parentLeaf:'parentLeafValue', parentLeafList:['parentLeafListEntry1','parentLeafListEntry2']],[
+ buildDataNode('/parent/child-list[@id=1]',[listElementLeaf:'listElement1leafValue'],noChildren),
+ buildDataNode('/parent/child-list[@id=2]',[listElementLeaf:'listElement2leafValue'],noChildren),
+ buildDataNode('/parent/child-object',[childLeaf:'childLeafValue'],
+ [buildDataNode('/parent/child-object/grand-child-object',[grandChildLeaf:'grandChildLeafValue'],noChildren)]
+ ),
+ ])
static def buildDataNode(xpath, leaves, children) {
return new DataNodeBuilder().withXpath(xpath).withLeaves(leaves).withChildDataNodes(children).build()
@@ -81,4 +81,16 @@ class DataMapUtilsSpec extends Specification {
and: 'leaves for grandchild element is populated under its node identifier'
parentNode.'child-object'.'grand-child-object'.grandChildLeaf == 'grandChildLeafValue'
}
+
+ def 'Adding prefix to data node identifier.'() {
+ when: 'a valid xPath is passed to the addPrefixToXpath method'
+ def result = new DataMapUtils().getNodeIdentifierWithPrefix(xPath,'sampleModuleName')
+ then: 'the correct modified node identifier is given'
+ assert result == expectedNodeIdentifier
+ where: 'the following parameters are used'
+ scenario | xPath | expectedNodeIdentifier
+ 'container xpath' | '/bookstore' | 'sampleModuleName:bookstore'
+ 'xpath contains list attribute' | '/bookstore/categories[@code=1]' | 'sampleModuleName:categories'
+ }
}
+