[ONOS-6981] Handling uses under module being model object, in YTB.

Change-Id: I35b6369427f9adc59618b381eb7ca258e13b4305
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
index 43612ee..06e19eb 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
@@ -17,11 +17,13 @@
 
 import org.onosproject.yang.compiler.datamodel.YangAugment;
 import org.onosproject.yang.compiler.datamodel.YangAugmentableNode;
+import org.onosproject.yang.compiler.datamodel.YangInput;
 import org.onosproject.yang.compiler.datamodel.YangLeaf;
 import org.onosproject.yang.compiler.datamodel.YangLeafList;
 import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
 import org.onosproject.yang.compiler.datamodel.YangList;
 import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
 import org.onosproject.yang.compiler.datamodel.YangRpc;
 import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
 import org.onosproject.yang.compiler.datamodel.YangSchemaNodeType;
@@ -165,7 +167,6 @@
         YangNode node = (YangNode) reg.getForRegClassQualifiedName(modPkg.toString(),
                                                                    true);
         if (node != null) {
-            isInputOrOutput = true;
             modNode = node;
             //in this case we should update the lastIndexNode for object to
             // data fetchNode conversion. because we need to create the data fetchNode
@@ -182,6 +183,10 @@
                 }
                 node = node.getNextSibling();
             }
+            if (lastIndexNode instanceof YangInput ||
+                    lastIndexNode instanceof YangOutput) {
+                isInputOrOutput = true;
+            }
         } else {
             modPkg.append(PERIOD);
             //In this case this package will be of module fetchNode.
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YtbResourceIdTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YtbResourceIdTest.java
index 9188c7d..9e63b1a 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YtbResourceIdTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YtbResourceIdTest.java
@@ -64,6 +64,10 @@
 import org.onosproject.yang.gen.v1.yrtsubscription.yrtsubscription.subscriptions.Subscription;
 import org.onosproject.yang.gen.v1.yrtsubscription.yrtsubscription.subscriptions.subscription.receivers.receiver.AugmentedReceiver;
 import org.onosproject.yang.gen.v1.yrtsubscription.yrtsubscription.subscriptions.subscription.receivers.receiver.DefaultAugmentedReceiver;
+import org.onosproject.yang.gen.v1.ytbmodulewithcontainer.rev20160826.ytbmodulewithcontainer.gr1.Cont;
+import org.onosproject.yang.gen.v1.ytbmodulewithcontainer.rev20160826.ytbmodulewithcontainer.gr1.DefaultCont;
+import org.onosproject.yang.gen.v1.ytbmodulewithcontainer.rev20160826.ytbmodulewithcontainer.gr2.DefaultListener;
+import org.onosproject.yang.gen.v1.ytbmodulewithcontainer.rev20160826.ytbmodulewithcontainer.gr2.Listener;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.DefaultModelObjectData.Builder;
 import org.onosproject.yang.model.InnerModelObject;
@@ -479,4 +483,44 @@
                          SINGLE_INSTANCE_LEAF_VALUE_NODE, true,
                          "active");
     }
+
+    /**
+     * Processes uses under module, which has model object.
+     */
+    @Test
+    public void processGroupingInModule() {
+        Cont cont = new DefaultCont();
+        Listener listener = new DefaultListener();
+        listener.yangAutoPrefixWait("wait");
+        cont.addToListener(listener);
+        data = new Builder();
+        data.addModelObject((ModelObject) cont);
+        rscData = treeBuilder.getResourceData(data.build());
+        List<DataNode> contDn = rscData.dataNodes();
+        String ns = "yms:test:ytb:module:with:container";
+        Iterator<DataNode> it = contDn.iterator();
+
+        DataNode contNode = it.next();
+        validateDataNode(contNode, "cont", ns, SINGLE_INSTANCE_NODE,
+                         true, null);
+
+        Map<NodeKey, DataNode> child = ((InnerNode) contNode).childNodes();
+        List<DataNode> list = new LinkedList<>();
+        for (Map.Entry<NodeKey, DataNode> c : child.entrySet()) {
+            list.add(c.getValue());
+        }
+
+        it = list.iterator();
+        DataNode lis = it.next();
+        validateDataNode(lis, "listener", ns, MULTI_INSTANCE_NODE,
+                         true, null);
+        child = ((InnerNode) lis).childNodes();
+        list = new LinkedList<>();
+        for (Map.Entry<NodeKey, DataNode> c : child.entrySet()) {
+            list.add(c.getValue());
+        }
+        it = list.iterator();
+        validateDataNode(it.next(), "wait", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "wait");
+    }
 }
diff --git a/runtime/src/test/resources/ytbTestYangFiles/YtbModuleWithContainer.yang b/runtime/src/test/resources/ytbTestYangFiles/YtbModuleWithContainer.yang
index d611bee..be3bba5 100644
--- a/runtime/src/test/resources/ytbTestYangFiles/YtbModuleWithContainer.yang
+++ b/runtime/src/test/resources/ytbTestYangFiles/YtbModuleWithContainer.yang
@@ -10,4 +10,23 @@
             }
         }
     }
+
+    grouping gr2 {
+        list listener {
+            key "wait";
+            leaf "wait" {
+                type string;
+            }
+        }
+    }
+
+    grouping gr1 {
+        container cont {
+            uses gr2;
+        }
+
+        uses gr2;
+    }
+
+    uses gr1;
 }