Fixed decode of YANG presence container with YCH
Change-Id: I3bd323dcdc84771da310ebb19d1573f7cf5252ba
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
index eefc60f..2cfef20 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
@@ -73,8 +73,8 @@
/*
* When new module has to be added, and if curnode has reference of
- * previous module, then we need to traverse back to parent(logical root
- * node).
+ * previous module, then we need to traverse back to parent(logical
+ * root node).
*/
if (ydtExtBuilder.getRootNode() == ydtExtBuilder.getCurNode()
.getParent() && prevNodeNamespace != null &&
@@ -82,11 +82,15 @@
ydtExtBuilder.traverseToParent();
}
- if (nodeType == OBJECT_NODE && element.content() == null || element
- .content().isEmpty()) {
- nodeType = TEXT_NODE;
- }
- if (nodeType == OBJECT_NODE) {
+ if (nodeType == OBJECT_NODE &&
+ (element.content() == null || element.content().isEmpty())) {
+ if (ydtExtBuilder != null) {
+ if (ydtExtBuilder.getCurNode() == ydtExtBuilder.getRootNode()) {
+ ydtExtBuilder.addChild(null, nameSpace, opType);
+ }
+ ydtExtBuilder.addNode(element.getName(), nameSpace);
+ }
+ } else if (nodeType == OBJECT_NODE) {
if (ydtExtBuilder != null) {
if (ydtExtBuilder.getCurNode() == ydtExtBuilder.getRootNode()) {
ydtExtBuilder.addChild(null, nameSpace, opType);
@@ -94,7 +98,6 @@
ydtExtBuilder.addChild(element.getName(), nameSpace, opType);
}
} else if (nodeType == TEXT_NODE) {
-
if (ydtExtBuilder != null) {
if (ydtExtBuilder.getCurNode() == ydtExtBuilder.getRootNode()) {
ydtExtBuilder.addChild(null, nameSpace, opType);
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java
index 4c1a16c..cae9134 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java
@@ -35,5 +35,9 @@
* Requested Node is of type multi instance leaf/node.
*/
MULTI_INSTANCE,
-}
+ /**
+ * Requested Node is of type container but is empty.
+ */
+ EMPTY_CONTAINER,
+}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
index e5e9f86..2164e5b 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
@@ -522,6 +522,14 @@
addLeaf(name, namespace, null, valueSet, MULTI_INSTANCE_LEAF);
}
+ @Override
+ public void addNode(String name, String namespace)
+ throws IllegalArgumentException {
+ addChild(name, namespace, RequestedCardinality.UNKNOWN,
+ null, RequestedCallType.EMPTY_CONTAINER);
+ }
+
+
/**
* Adds a last leaf with list of values/single value to YANG data tree.
* This method is used by all protocols which knows the nature
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java
index aa84cea..7fe6f95 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java
@@ -186,6 +186,19 @@
throw new YdtException(E_MULTI_INS);
}
+ case EMPTY_CONTAINER:
+ switch (nodeType) {
+
+ case YANG_SINGLE_INSTANCE_NODE:
+ return new YdtSingleInstanceNode(node);
+
+ case YANG_SINGLE_INSTANCE_LEAF_NODE:
+ return new YdtSingleInstanceLeafNode(node);
+
+ default:
+ return null;
+ }
+
default:
return null;
}