final List<PathArgument> collectedMixinNodes = new ArrayList<>();
DataSchemaContextNode<?> actualContextNode = currentNode.getChild(childQName);
+ if (actualContextNode == null) {
+ actualContextNode = resolveMixinNode(currentNode, currentNode.getIdentifier().getNodeType());
+ actualContextNode = actualContextNode.getChild(childQName);
+ }
+
while (actualContextNode != null && actualContextNode.isMixin()) {
- if (actualContextNode.getDataSchemaNode() instanceof ListSchemaNode) {
- // we need just a single node identifier from list in the path (key is not available)
+ final var actualDataSchemaNode = actualContextNode.getDataSchemaNode();
+ if (actualDataSchemaNode instanceof ListSchemaNode listSchema && listSchema.getKeyDefinition().isEmpty()) {
+ // we need just a single node identifier from list in the path IFF it is an unkeyed list, otherwise
+ // we need both (which is the default case)
actualContextNode = actualContextNode.getChild(childQName);
- break;
- } else if (actualContextNode.getDataSchemaNode() instanceof LeafListSchemaNode) {
+ } else if (actualDataSchemaNode instanceof LeafListSchemaNode) {
// NodeWithValue is unusable - stop parsing
break;
} else {
return actualContextNode;
}
+ private static DataSchemaContextNode<?> resolveMixinNode(
+ final DataSchemaContextNode<?> node, final @NonNull QName qualifiedName) {
+ DataSchemaContextNode<?> currentNode = node;
+ while (currentNode != null && currentNode.isMixin()) {
+ currentNode = currentNode.getChild(qualifiedName);
+ }
+ return currentNode;
+ }
+
/**
* {@link PathArgument} of data element grouped with identifiers of leading mixin nodes and previous node.<br>
* - identifiers of mixin nodes on the path to the target node - required for construction of full valid
assertEquals(LIBRARY_Q_NAME, pathArguments.get(0).getNodeType());
}
+ @Override
+ protected void assertKeyedList(List<YangInstanceIdentifier> result) {
+ assertEquals(1, result.size());
+ }
+
@Override
protected void assertDoublePath(final List<YangInstanceIdentifier> result) {
assertEquals(2, result.size());
@Override
protected void assertSubPath(final List<YangInstanceIdentifier> result) {
- // FIXME: NETCONF-820: add assertions
+ assertEquals(1, result.size());
+ final var pathArguments = result.get(0).getPathArguments();
+ assertEquals(6, pathArguments.size());
+ assertEquals(LIBRARY_Q_NAME, pathArguments.get(0).getNodeType());
+ assertEquals(ARTIST_Q_NAME, pathArguments.get(1).getNodeType());
+ assertEquals(ARTIST_Q_NAME, pathArguments.get(2).getNodeType());
+ assertEquals(ALBUM_Q_NAME, pathArguments.get(3).getNodeType());
+ assertEquals(ALBUM_Q_NAME, pathArguments.get(4).getNodeType());
+ assertEquals(NAME_Q_NAME, pathArguments.get(5).getNodeType());
}
@Override
protected void assertChildrenPath(final List<YangInstanceIdentifier> result) {
assertEquals(1, result.size());
final var pathArguments = result.get(0).getPathArguments();
- assertEquals(4, pathArguments.size());
+ assertEquals(6, pathArguments.size());
assertEquals(LIBRARY_Q_NAME, pathArguments.get(0).getNodeType());
assertEquals(ARTIST_Q_NAME, pathArguments.get(1).getNodeType());
- assertEquals(ALBUM_Q_NAME, pathArguments.get(2).getNodeType());
- assertEquals(NAME_Q_NAME, pathArguments.get(3).getNodeType());
+ assertEquals(ARTIST_Q_NAME, pathArguments.get(2).getNodeType());
+ assertEquals(ALBUM_Q_NAME, pathArguments.get(3).getNodeType());
+ assertEquals(ALBUM_Q_NAME, pathArguments.get(4).getNodeType());
+ assertEquals(NAME_Q_NAME, pathArguments.get(5).getNodeType());
}
@Override
protected void assertNamespace(final List<YangInstanceIdentifier> result) {
- // FIXME: add assertions
+ assertEquals(1, result.size());
+ final var augmentedLibraryPath = assertPath(result, AUGMENTED_LIBRARY_Q_NAME);
+ assertEquals(2, augmentedLibraryPath.getPathArguments().size());
}
@Override
assertEquals(3, result.size());
final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
- assertEquals(2, tosPath.getPathArguments().size());
+ assertEquals(3, tosPath.getPathArguments().size());
final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
- assertEquals(3, instanceNamePath.getPathArguments().size());
+ assertEquals(5, instanceNamePath.getPathArguments().size());
final var providerPath = assertPath(result, PROVIDER_Q_NAME);
- assertEquals(3, providerPath.getPathArguments().size());
+ assertEquals(5, providerPath.getPathArguments().size());
}
@Override
protected void assertMultipleChildren2(final List<YangInstanceIdentifier> result) {
- // FIXME: add assertions
+ assertEquals(3, result.size());
+
+ final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
+ assertEquals(3, tosPath.getPathArguments().size());
+
+ final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
+ assertEquals(5, instanceNamePath.getPathArguments().size());
+
+ final var providerPath = assertPath(result, PROVIDER_Q_NAME);
+ assertEquals(5, providerPath.getPathArguments().size());
}
@Override
protected void assertMultipleChildren3(final List<YangInstanceIdentifier> result) {
- // FIXME: add assertions
+ assertEquals(3, result.size());
+
+ final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
+ assertEquals(5, instanceNamePath.getPathArguments().size());
+
+ final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
+ assertEquals(3, tosPath.getPathArguments().size());
+
+ final var nextServicePath = assertPath(result, NEXT_SERVICE_Q_NAME);
+ assertEquals(4, nextServicePath.getPathArguments().size());
}
@Override
assertEquals(4, result.size());
final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
- assertEquals(3, instanceNamePath.getPathArguments().size());
+ assertEquals(5, instanceNamePath.getPathArguments().size());
final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
- assertEquals(2, tosPath.getPathArguments().size());
+ assertEquals(3, tosPath.getPathArguments().size());
final var nextServicePath = assertPath(result, NEXT_SERVICE_Q_NAME);
- assertEquals(3, nextServicePath.getPathArguments().size());
+ assertEquals(4, nextServicePath.getPathArguments().size());
final var providerPath = assertPath(result, PROVIDER_Q_NAME);
- assertEquals(3, providerPath.getPathArguments().size());
+ assertEquals(5, providerPath.getPathArguments().size());
}
@Override
assertEquals(4, result.size());
final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
- assertEquals(3, instanceNamePath.getPathArguments().size());
+ assertEquals(5, instanceNamePath.getPathArguments().size());
final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
- assertEquals(2, tosPath.getPathArguments().size());
+ assertEquals(3, tosPath.getPathArguments().size());
final var nextServicePath = assertPath(result, NEXT_SERVICE_Q_NAME);
- assertEquals(3, nextServicePath.getPathArguments().size());
+ assertEquals(4, nextServicePath.getPathArguments().size());
final var providerPath = assertPath(result, PROVIDER_Q_NAME);
- assertEquals(3, providerPath.getPathArguments().size());
+ assertEquals(5, providerPath.getPathArguments().size());
}
@Override
protected void assertListFieldUnderList(final List<YangInstanceIdentifier> result) {
assertEquals(1, result.size());
assertEquals(List.of(
- // FIXME: this does not look right: where are the corresponding NodeIdentifiers?
+ NodeIdentifier.create(SERVICES_Q_NAME),
NodeIdentifierWithPredicates.of(SERVICES_Q_NAME),
+ NodeIdentifier.create(INSTANCE_Q_NAME),
NodeIdentifierWithPredicates.of(INSTANCE_Q_NAME)),
result.get(0).getPathArguments());
}
@Override
protected void assertMultipleChildren1(final List<Set<QName>> result) {
- assertEquals(result.size(), 3);
+ assertEquals(3, result.size());
assertEquals(Set.of(SERVICES_Q_NAME), result.get(0));
assertEquals(Set.of(TYPE_OF_SERVICE_Q_NAME, INSTANCE_Q_NAME), result.get(1));
assertEquals(Set.of(INSTANCE_NAME_Q_NAME, PROVIDER_Q_NAME), result.get(2));
@Override
protected void assertMultipleChildren2(final List<Set<QName>> result) {
- assertEquals(result.size(), 3);
+ assertEquals(3, result.size());
assertEquals(Set.of(SERVICES_Q_NAME), result.get(0));
assertEquals(Set.of(TYPE_OF_SERVICE_Q_NAME, INSTANCE_Q_NAME), result.get(1));
assertEquals(Set.of(INSTANCE_NAME_Q_NAME, PROVIDER_Q_NAME), result.get(2));
@Override
protected void assertMultipleChildren3(final List<Set<QName>> result) {
- assertEquals(result.size(), 3);
+ assertEquals(3, result.size());
assertEquals(Set.of(SERVICES_Q_NAME), result.get(0));
assertEquals(Set.of(TYPE_OF_SERVICE_Q_NAME, INSTANCE_Q_NAME, NEXT_DATA_Q_NAME), result.get(1));
assertEquals(Set.of(INSTANCE_NAME_Q_NAME, NEXT_SERVICE_Q_NAME), result.get(2));
@Override
protected void assertMultipleChildren4(final List<Set<QName>> result) {
- assertEquals(result.size(), 3);
+ assertEquals(3, result.size());
assertEquals(Set.of(SERVICES_Q_NAME), result.get(0));
assertEquals(Set.of(TYPE_OF_SERVICE_Q_NAME, INSTANCE_Q_NAME, NEXT_DATA_Q_NAME), result.get(1));
assertEquals(Set.of(INSTANCE_NAME_Q_NAME, PROVIDER_Q_NAME, NEXT_SERVICE_Q_NAME), result.get(2));
@Override
protected void assertMultipleChildren5(final List<Set<QName>> result) {
- assertEquals(result.size(), 3);
+ assertEquals(3, result.size());
assertEquals(Set.of(SERVICES_Q_NAME), result.get(0));
assertEquals(Set.of(TYPE_OF_SERVICE_Q_NAME, INSTANCE_Q_NAME, NEXT_DATA_Q_NAME), result.get(1));
assertEquals(Set.of(INSTANCE_NAME_Q_NAME, PROVIDER_Q_NAME, NEXT_SERVICE_Q_NAME), result.get(2));
@Override
protected void assertAugmentedChild(final List<Set<QName>> result) {
- // FIXME: add assertions
+ assertEquals(2, result.size());
+ assertEquals(Set.of(PLAYER_Q_NAME), result.get(0));
+ assertEquals(Set.of(SPEED_Q_NAME), result.get(1));
}
@Override
protected void assertListFieldUnderList(final List<Set<QName>> result) {
- // FIXME: add assertions
+ assertEquals(2, result.size());
+ assertEquals(Set.of(SERVICES_Q_NAME), result.get(0));
+ assertEquals(Set.of(INSTANCE_Q_NAME), result.get(1));
+ }
+
+ @Override
+ protected void assertKeyedList(final List<Set<QName>> result) {
+ assertEquals(3, result.size());
+ assertEquals(Set.of(LIBRARY_Q_NAME), result.get(0));
+ assertEquals(Set.of(ARTIST_Q_NAME), result.get(1));
+ assertEquals(Set.of(NAME_Q_NAME), result.get(2));
}
@Override
protected void assertLeafList(final List<Set<QName>> result) {
- // FIXME: add assertions
+ assertEquals(1, result.size());
+ assertEquals(Set.of(PROTOCOLS_Q_NAME), result.get(0));
}
}