Refactored parsing of key in list schema node.
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / impl / YangParserImpl.java
index 73291d16ec06e40c8bbfa313eb7be358e93c6bd4..09862a464776a14882225d937db0e7487a99a86d 100644 (file)
@@ -40,15 +40,7 @@ import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.TypeAwareBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.ChoiceBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.ChoiceCaseBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.DeviationBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.ExtensionBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.IdentitySchemaNodeBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.IdentityrefTypeBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.UnionTypeBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.UnknownSchemaNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.impl.*;
 import org.opendaylight.yangtools.yang.parser.util.Comparators;
 import org.opendaylight.yangtools.yang.parser.util.GroupingSort;
 import org.opendaylight.yangtools.yang.parser.util.GroupingUtils;
@@ -488,6 +480,7 @@ public final class YangParserImpl implements YangModelParser {
         resolveUsesTargetGrouping(modules, null);
         resolveUsesForGroupings(modules, null);
         resolveUsesForNodes(modules, null);
+        resolveListsKey(modules);
         resolveAugments(modules, null);
         resolveDeviations(modules);
 
@@ -511,6 +504,7 @@ public final class YangParserImpl implements YangModelParser {
         resolveUsesTargetGrouping(modules, context);
         resolveUsesForGroupings(modules, context);
         resolveUsesForNodes(modules, context);
+        resolveListsKey(modules);
         resolveAugments(modules, context);
         resolveDeviationsWithContext(modules, context);
 
@@ -1059,6 +1053,28 @@ public final class YangParserImpl implements YangModelParser {
         }
     }
 
+    private void resolveListsKey(final Map<String, TreeMap<Date, ModuleBuilder>> modules) {
+        for (Map.Entry<String, TreeMap<Date, ModuleBuilder>> entry : modules.entrySet()) {
+            for (Map.Entry<Date, ModuleBuilder> inner : entry.getValue().entrySet()) {
+                ModuleBuilder module = inner.getValue();
+                List<ListSchemaNodeBuilder> allLists = module.getAllLists();
+                for (ListSchemaNodeBuilder list : allLists) {
+                    List<String> keys = list.getKeys();
+                    if (keys == null) {
+                        list.setKeyDefinition(Collections.<QName> emptyList());
+                    } else {
+                        List<QName> qnames = new ArrayList<>();
+                        for (String key : keys) {
+                            qnames.add(list.getDataChildByName(key).getQName());
+                        }
+                        list.setKeyDefinition(qnames);
+                    }
+
+                }
+            }
+        }
+    }
+
     private void resolveUnknownNodes(final Map<String, TreeMap<Date, ModuleBuilder>> modules, final ModuleBuilder module) {
         for (UnknownSchemaNodeBuilder usnb : module.getAllUnknownNodes()) {
             QName nodeType = usnb.getNodeType();