AugmentationTargetBuilder {
private boolean isBuilt;
private final ListSchemaNodeImpl instance;
+ private List<String> keys;
// SchemaNode args
private SchemaPath schemaPath;
// DataSchemaNode args
return augmentationBuilders;
}
+ public List<String> getKeys() {
+ return keys;
+ }
+
+ public void setKeys(final List<String> keys) {
+ this.keys = keys;
+ }
+
public List<QName> getKeyDefinition() {
return instance.keyDefinition;
}
private final List<UnknownSchemaNodeBuilder> allUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
+ private final List<ListSchemaNodeBuilder> allLists = new ArrayList<ListSchemaNodeBuilder>();
+
public ModuleBuilder(final String name) {
this(name, false);
}
return allUnknownNodes;
}
+ public List<ListSchemaNodeBuilder> getAllLists() {
+ return allLists;
+ }
+
public String getName() {
return name;
}
Builder parent = getActualNode();
builder.setParent(parent);
addChildToParent(parent, builder, qname.getLocalName());
+ allLists.add(builder);
return builder;
}
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;
resolveUsesTargetGrouping(modules, null);
resolveUsesForGroupings(modules, null);
resolveUsesForNodes(modules, null);
+ resolveListsKey(modules);
resolveAugments(modules, null);
resolveDeviations(modules);
resolveUsesTargetGrouping(modules, context);
resolveUsesForGroupings(modules, context);
resolveUsesForNodes(modules, context);
+ resolveListsKey(modules);
resolveAugments(modules, context);
resolveDeviationsWithContext(modules, context);
}
}
+ 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();
parseConstraints(ctx, builder.getConstraints());
builder.setConfiguration(getConfig(ctx, moduleBuilder.getActualParent(), moduleName, line));
- String keyDefinition = "";
for (int i = 0; i < ctx.getChildCount(); ++i) {
ParseTree childNode = ctx.getChild(i);
if (childNode instanceof Ordered_by_stmtContext) {
final boolean userOrdered = parseUserOrdered(orderedBy);
builder.setUserOrdered(userOrdered);
} else if (childNode instanceof Key_stmtContext) {
- keyDefinition = stringFromNode(childNode);
- List<QName> key = createListKey(keyDefinition, namespace, revision, yangModelPrefix);
- builder.setKeyDefinition(key);
+ List<String> key = createListKey((Key_stmtContext) childNode);
+ builder.setKeys(key);
}
}
}
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Fraction_digits_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Identityref_specificationContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Instance_identifier_specificationContext;
+import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Key_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Leafref_specificationContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Length_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Mandatory_argContext;
final StringContext context = (StringContext) treeNode.getChild(i);
if (context != null) {
return stringFromStringContext(context);
-
+
}
}
}
}
/**
- * Create java.util.List of QName objects from given key definition as
- * string.
+ * Create java.util.List of key node names.
*
* @param keyDefinition
* key definition as string
- * @param namespace
- * current namespace
- * @param revision
- * current revision
- * @param prefix
- * current prefix
- * @return YANG list key as java.util.List of QName objects
+ * @return YANG list key as java.util.List of key node names
*/
- public static List<QName> createListKey(final String keyDefinition, final URI namespace, final Date revision,
- final String prefix) {
- List<QName> key = new ArrayList<>();
+ public static List<String> createListKey(final Key_stmtContext ctx) {
+ String keyDefinition = stringFromNode(ctx);
+ List<String> keys = new ArrayList<>();
String[] splittedKey = keyDefinition.split(" ");
-
- QName qname;
for (String keyElement : splittedKey) {
- if (keyElement.length() != 0) {
- qname = new QName(namespace, revision, prefix, keyElement);
- key.add(qname);
+ if (!keyElement.isEmpty()) {
+ keys.add(keyElement);
}
}
- return key;
+ return keys;
}
/**
checkState(!potentialValues.isEmpty());
return ParserListenerUtils.stringFromStringContext(potentialValues.get(0));
}
-
+
public static <T extends ParserRuleContext> Optional<T> getFirstContext(ParserRuleContext context,Class<T> contextType) {
List<T> potential = context.getRuleContexts(contextType);
if(potential.isEmpty()) {
*/
public static def boolean processAugmentation(AugmentationSchemaBuilder augment, ModuleBuilder firstNodeParent) {
val path = augment.targetPath.path
- var Builder targetNode = findSchemaNodeInModule(path, firstNodeParent as ModuleBuilder)
+ var Builder targetNode = findSchemaNodeInModule(path, firstNodeParent)
if(targetNode === null) return false;
if ((targetNode instanceof DataNodeContainerBuilder)) {
assertEquals(0, ifEntry.getUses().size());
LeafSchemaNode ifIndex = (LeafSchemaNode) ifEntry.getDataChildByName("ifIndex");
+ assertEquals(ifEntry.getKeyDefinition().get(0), ifIndex.getQName());
assertTrue(ifIndex.getType() instanceof Uint32);
LeafSchemaNode ifMtu = (LeafSchemaNode) ifEntry.getDataChildByName("ifMtu");
assertTrue(ifMtu.getType() instanceof Int32);