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