[ONOS-7302] value namespace handling by model converter
Change-Id: I75f3ec01c20de8a145f154137c0e81dce2caf6ea
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
index 0f56b4b..80fc2f3 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
@@ -32,6 +32,8 @@
import org.onosproject.yang.model.DataNode;
import org.onosproject.yang.model.InnerNode;
import org.onosproject.yang.model.LeafNode;
+import org.onosproject.yang.model.LeafSchemaContext;
+import org.onosproject.yang.model.YangNamespace;
import java.util.ArrayList;
import java.util.HashMap;
@@ -906,9 +908,10 @@
YangLeafList leafList) {
if (extBuilder != null) {
for (Object val : leafListVal) {
+ String valNamespace = getValNamespace(val, leafList);
DataNode.Builder leaf = extBuilder.createChildBuilder(
leafList.getName(), leafList.getNameSpace()
- .getModuleNamespace(), val);
+ .getModuleNamespace(), val, valNamespace);
leaf.type(MULTI_INSTANCE_LEAF_VALUE_NODE);
leaf.addLeafListValue(val);
extBuilder = leaf.exitNode();
@@ -918,9 +921,11 @@
//In case of root node leaf lists.
List<DataNode.Builder> builders = new ArrayList<>();
for (Object val : leafListVal) {
+ String valNamespace = getValNamespace(val, leafList);
DataNode.Builder leaf = LeafNode.builder(
leafList.getName(), leafList.getNameSpace()
- .getModuleNamespace()).value(val);
+ .getModuleNamespace()).value(val)
+ .valueNamespace(valNamespace);
leaf.type(MULTI_INSTANCE_LEAF_VALUE_NODE);
leaf.addLeafListValue(val);
builders.add(leaf);
@@ -962,6 +967,7 @@
* @param val value for the leaf
*/
DataNode.Builder createLeafNode(YangLeaf yangLeaf, Object val) {
+ String valNamespace = getValNamespace(val, yangLeaf);
if (extBuilder != null) {
//Add leaf to key leaves.
if (yangLeaf.isKeyLeaf()) {
@@ -971,7 +977,7 @@
//build leaf node and add to parent node.
DataNode.Builder leaf = extBuilder.createChildBuilder(
yangLeaf.getName(), yangLeaf.getNameSpace()
- .getModuleNamespace(), val);
+ .getModuleNamespace(), val, valNamespace);
leaf.type(SINGLE_INSTANCE_LEAF_VALUE_NODE);
extBuilder = leaf.exitNode();
@@ -980,7 +986,7 @@
return LeafNode.builder(yangLeaf.getName(), yangLeaf.getNameSpace()
.getModuleNamespace())
.type(SINGLE_INSTANCE_LEAF_VALUE_NODE)
- .value(val);
+ .value(val).valueNamespace(valNamespace);
}
/**
@@ -1007,4 +1013,15 @@
}
return new ModelConverterTraversalInfo((YangNode) exitBuilderSchema, PARENT);
}
+
+ public static String getValNamespace(Object val, LeafSchemaContext lsc) {
+ String valNamespace = null;
+ if (val != null) {
+ YangNamespace yn = lsc.getValueNamespace(val.toString());
+ if (yn != null) {
+ valNamespace = yn.getModuleNamespace();
+ }
+ }
+ return valNamespace;
+ }
}
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
index 7953ee5..264688f 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
@@ -58,6 +58,7 @@
import static org.onosproject.yang.runtime.RuntimeHelper.DEFAULT_CAPS;
import static org.onosproject.yang.runtime.RuntimeHelper.PERIOD;
import static org.onosproject.yang.runtime.RuntimeHelper.getCapitalCase;
+import static org.onosproject.yang.runtime.impl.DataTreeBuilderHelper.getValNamespace;
import static org.onosproject.yang.runtime.impl.ModelConverterUtil.TRUE;
import static org.onosproject.yang.runtime.impl.ModelConverterUtil.getAttributeOfObject;
import static org.onosproject.yang.runtime.impl.ModelConverterUtil.getJavaName;
@@ -224,8 +225,8 @@
child = child.getNextSibling();
}
while (child != null && child instanceof YangRpc &&
- !name.contains(child.getJavaPackage() + "."
- + child.getJavaClassNameOrBuiltInType().toLowerCase())) {
+ !name.contains(child.getJavaPackage() + "." +
+ child.getJavaClassNameOrBuiltInType().toLowerCase())) {
child = child.getNextSibling();
}
if (child != null) {
@@ -477,11 +478,13 @@
objects.add(null);
}
for (Object obj : objects) {
+ String valNamespace = getValNamespace(obj, leafList);
DataNode node = LeafNode
.builder(leafList.getName(), leafList
.getNameSpace().getModuleNamespace())
.value(obj)
- .type(MULTI_INSTANCE_LEAF_VALUE_NODE).build();
+ .type(MULTI_INSTANCE_LEAF_VALUE_NODE)
+ .valueNamespace(valNamespace).build();
rscData.addDataNode(node);
}
}
@@ -515,10 +518,12 @@
}
obj = null;
}
+ String valNamespace = getValNamespace(obj, leaf);
DataNode node = LeafNode.builder(leaf.getName(), leaf
.getNameSpace().getModuleNamespace())
.value(obj)
- .type(SINGLE_INSTANCE_LEAF_VALUE_NODE).build();
+ .type(SINGLE_INSTANCE_LEAF_VALUE_NODE)
+ .valueNamespace(valNamespace).build();
rscData.addDataNode(node);
break;
}