Bug 2117: Inner grouping used in outer grouping's choice case 17/12217/1
authorMartin Ciglan <mciglan@cisco.com>
Fri, 24 Oct 2014 08:55:17 +0000 (10:55 +0200)
committerMartin Ciglan <mciglan@cisco.com>
Fri, 24 Oct 2014 08:55:17 +0000 (10:55 +0200)
Inner grouping(s) of outer grouping(s) found and handled properly

Change-Id: I09853215febf47312b431976ad096d1ee774c9f6
Signed-off-by: Martin Ciglan <mciglan@cisco.com>
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java

index 57ed8fdd1da3ebdd47b89f690b6e1571114ef06b..83a706133623d458c8c201373b415b8367f25fcc 100644 (file)
@@ -274,7 +274,8 @@ public final class SchemaContextUtil {
         return null;
     }
 
-    private static SchemaNode findNodeInGrouping(final GroupingDefinition grouping, final Iterable<QName> path) {
+    private static SchemaNode findNodeInGrouping(
+            final GroupingDefinition grouping, final Iterable<QName> path) {
         final QName current = Iterables.getFirst(path, null);
         if (current == null) {
             LOG.debug("Found grouping {}", grouping);
@@ -283,12 +284,17 @@ public final class SchemaContextUtil {
 
         LOG.trace("Looking for path {} in grouping {}", path, grouping);
         final DataSchemaNode node = grouping.getDataChildByName(current);
-        if (node == null) {
-            LOG.debug("No node matching {} found in grouping {}", current, grouping);
-            return null;
+
+        if (node != null)
+            return findNode(node, nextLevel(path));
+
+        for (GroupingDefinition groupingDefinition : grouping.getGroupings()) {
+            if (groupingDefinition.getQName().equals(current))
+                return findNodeInGrouping(groupingDefinition, nextLevel(path));
         }
 
-        return findNode(node, nextLevel(path));
+        LOG.debug("No node matching {} found in grouping {}", current, grouping);
+        return null;
     }
 
     private static SchemaNode findNodeInRpc(final RpcDefinition rpc, final Iterable<QName> path) {