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;
         }