Remove MountPointIdentifier as the last remnant of rfc8528-data-api.
This forces an adjustment to yang-data-codec-binfmt, which can no longer
read this PathArgument.
It also allows us to seal YangInstanceIdentifier.PathArgument, not
allowing any external implementations of it.
JIRA: YANGTOOLS-1172
Change-Id: Ibdbb5d2eb9d63f3d0e8a95065e8124ce6818a7af
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
<version>11.0.0-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-api</artifactId>
- <version>11.0.0-SNAPSHOT</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>rfc8528-data-util</artifactId>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-model-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-api</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-data-tree-api</artifactId>
requires transitive org.opendaylight.yangtools.yang.data.tree.spi;
requires java.xml;
requires org.opendaylight.yangtools.yang.data.impl;
- requires org.opendaylight.yangtools.rfc8528.data.api;
requires org.slf4j;
// Annotations
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.dom.DOMSource;
import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Either;
import org.opendaylight.yangtools.util.ImmutableOffsetMapTemplate;
import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Empty;
default -> throw new InvalidNormalizedNodeStreamException("Unexpected PathArgument type " + type);
};
}
+
+ @Override
+ @Deprecated(since = "11.0.0", forRemoval = true)
+ public final Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
+ return Either.ofFirst(readPathArgument());
+ }
}
import java.util.concurrent.ExecutionException;
import javax.xml.transform.dom.DOMSource;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
+import org.opendaylight.yangtools.concepts.Either;
import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Empty;
}
@Override
- public final PathArgument readPathArgument() throws IOException {
+ @Deprecated(since = "11.0.0", forRemoval = true)
+ public final Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
final byte header = input.readByte();
return switch (header & MagnesiumPathArgument.TYPE_MASK) {
- case MagnesiumPathArgument.AUGMENTATION_IDENTIFIER -> readAugmentationIdentifier(header);
+ case MagnesiumPathArgument.AUGMENTATION_IDENTIFIER -> Either.ofFirst(readAugmentationIdentifier(header));
case MagnesiumPathArgument.NODE_IDENTIFIER -> {
verifyPathIdentifierOnly(header);
- yield readNodeIdentifier(header);
+ yield Either.ofFirst(readNodeIdentifier(header));
}
- case MagnesiumPathArgument.NODE_IDENTIFIER_WITH_PREDICATES -> readNodeIdentifierWithPredicates(header);
+ case MagnesiumPathArgument.NODE_IDENTIFIER_WITH_PREDICATES ->
+ Either.ofFirst(readNodeIdentifierWithPredicates(header));
case MagnesiumPathArgument.NODE_WITH_VALUE -> {
verifyPathIdentifierOnly(header);
- yield readNodeWithValue(header);
+ yield Either.ofFirst(readNodeWithValue(header));
}
case MagnesiumPathArgument.MOUNTPOINT_IDENTIFIER -> {
verifyPathIdentifierOnly(header);
- yield MountPointIdentifier.create(readNodeIdentifier(header).getNodeType());
+ yield Either.ofSecond(new LegacyMountPointIdentifier(readNodeIdentifier(header).getNodeType()));
}
default -> throw new InvalidNormalizedNodeStreamException("Unexpected PathArgument header " + header);
};
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Empty;
import org.opendaylight.yangtools.yang.common.QName;
writeAugmentationIdentifier(augid);
} else if (pathArgument instanceof NodeWithValue<?> niv) {
writeNodeWithValue(niv);
- } else if (pathArgument instanceof MountPointIdentifier mpid) {
- writeMountPointIdentifier(mpid);
} else {
throw new IOException("Unhandled PathArgument " + pathArgument);
}
writePathArgumentQName(identifier.getNodeType(), MagnesiumPathArgument.NODE_IDENTIFIER);
}
- private void writeMountPointIdentifier(final MountPointIdentifier identifier) throws IOException {
- writePathArgumentQName(identifier.getNodeType(), MagnesiumPathArgument.MOUNTPOINT_IDENTIFIER);
- }
-
private void writeNodeIdentifierWithPredicates(final NodeIdentifierWithPredicates identifier) throws IOException {
final int size = identifier.size();
if (size < 5) {
import java.io.IOException;
import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Either;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
return delegate().readPathArgument();
}
+ @Override
+ @Deprecated(since = "11.0.0", forRemoval = true)
+ public final Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
+ return delegate().readLegacyPathArgument();
+ }
+
@Override
public final SchemaNodeIdentifier readSchemaNodeIdentifier() throws IOException {
return delegate().readSchemaNodeIdentifier();
import static java.util.Objects.requireNonNull;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
import org.opendaylight.yangtools.yang.common.QName;
/**
- * Representation of legacy {@link MountPointIdentifier}.
+ * Representation of legacy {@code org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier}.
*/
@Deprecated(since = "11.0.0")
public record LegacyMountPointIdentifier(@NonNull QName qname) implements LegacyPathArgument {
* @return A PathArgument
* @throws IOException if an error occurs
*/
- @NonNull PathArgument readPathArgument() throws IOException;
+ default @NonNull PathArgument readPathArgument() throws IOException {
+ final var legacy = readLegacyPathArgument();
+ if (legacy.isFirst()) {
+ return legacy.getFirst();
+ }
+ throw new IOException(legacy.getSecond() + " does not have a representation");
+ }
/**
* Read a {@link PathArgument} or a {@link LegacyPathArgument} from the reader.
* @throws IOException if an error occurs
*/
@Deprecated(since = "11.0.0")
- default Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
- return Either.ofFirst(readPathArgument());
- }
+ @NonNull Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException;
@NonNull SchemaNodeIdentifier readSchemaNodeIdentifier() throws IOException;
requires transitive com.google.gson;
requires transitive org.opendaylight.yangtools.yang.data.api;
- requires transitive org.opendaylight.yangtools.rfc8528.data.api;
requires com.google.common;
requires java.xml;
requires transitive org.opendaylight.yangtools.yang.data.api;
requires transitive org.opendaylight.yangtools.yang.data.util;
requires transitive org.opendaylight.yangtools.yang.model.api;
- requires transitive org.opendaylight.yangtools.rfc8528.data.api;
requires java.xml;
requires com.google.common;
requires org.opendaylight.yangtools.yang.data.impl;
requires org.opendaylight.yangtools.rfc7952.model.api;
requires org.opendaylight.yangtools.rfc8528.model.api;
- requires org.opendaylight.yangtools.rfc8528.data.util;
requires org.slf4j;
// Annotations
<module>yang-data-tree-ri</module>
<!-- RFC8528 (mount-point) metamodel support -->
- <module>rfc8528-data-api</module>
<module>rfc8528-data-util</module>
</modules>
</project>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
- Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>bundle-parent</artifactId>
- <version>11.0.0-SNAPSHOT</version>
- <relativePath>../../bundle-parent</relativePath>
- </parent>
-
- <artifactId>rfc8528-data-api</artifactId>
- <packaging>bundle</packaging>
- <name>${project.artifactId}</name>
- <description>RFC8528 data model extensions</description>
-
- <dependencies>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>concepts</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>util</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-common</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-data-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-model-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-parser-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-model-api</artifactId>
- </dependency>
- </dependencies>
-</project>
+++ /dev/null
-/*
- * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-// 'rfc8528' in the name ends with a digit
-@SuppressWarnings("module")
-module org.opendaylight.yangtools.rfc8528.data.api {
- exports org.opendaylight.yangtools.rfc8528.data.api;
-
- requires transitive org.opendaylight.yangtools.concepts;
- requires transitive org.opendaylight.yangtools.yang.common;
- requires transitive org.opendaylight.yangtools.yang.data.api;
- requires transitive org.opendaylight.yangtools.yang.model.api;
- requires transitive org.opendaylight.yangtools.yang.parser.api;
- requires transitive org.opendaylight.yangtools.rfc8528.model.api;
- requires org.opendaylight.yangtools.util;
-
- // Annotations
- requires static transitive org.eclipse.jdt.annotation;
-}
+++ /dev/null
-/*
- * Copyright (c) 2019 PANTHEON.tech s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.rfc8528.data.api;
-
-import static java.util.Objects.requireNonNull;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.common.QName;
-
-final class MPIv1 implements Externalizable {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private QName qname;
-
- @SuppressWarnings("checkstyle:redundantModifier")
- public MPIv1() {
- // For Externalizable
- }
-
- MPIv1(final @NonNull QName qname) {
- this.qname = requireNonNull(qname);
- }
-
- @Override
- public void writeExternal(final ObjectOutput out) throws IOException {
- qname.writeTo(out);
- }
-
- @Override
- public void readExternal(final ObjectInput in) throws IOException {
- qname = QName.readFrom(in);
- }
-
- @java.io.Serial
- private Object readResolve() {
- return MountPointIdentifier.create(qname);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2019 PANTHEON.tech s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.rfc8528.data.api;
-
-import com.google.common.annotations.Beta;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.concepts.WritableObject;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
-import org.opendaylight.yangtools.util.AbstractIdentifier;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-
-@Beta
-@NonNullByDefault
-public final class MountPointIdentifier extends AbstractIdentifier<MountPointLabel>
- implements PathArgument, WritableObject {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private static final LoadingCache<QName, MountPointIdentifier> CACHE = CacheBuilder.newBuilder().weakValues()
- .build(new CacheLoader<QName, MountPointIdentifier>() {
- @Override
- public MountPointIdentifier load(final QName key) {
- return new MountPointIdentifier(MountPointLabel.create(key));
- }
- });
-
- public MountPointIdentifier(final MountPointLabel label) {
- super(label);
- }
-
- public static MountPointIdentifier of(final QName qname) {
- return new MountPointIdentifier(new MountPointLabel(qname));
- }
-
- public static MountPointIdentifier create(final QName qname) {
- final MountPointIdentifier existing = CACHE.getIfPresent(qname);
- return existing != null ? existing : CACHE.getUnchecked(qname.intern());
- }
-
- public static MountPointIdentifier readFrom(final DataInput in) throws IOException {
- return create(QName.readFrom(in));
- }
-
- public MountPointLabel getLabel() {
- return getValue();
- }
-
- @Override
- public void writeTo(final DataOutput out) throws IOException {
- getValue().writeTo(out);
- }
-
- @java.io.Serial
- private Object writeReplace() {
- return new MPIv1(getLabel().qname());
- }
-
- @Override
- @SuppressWarnings("checkstyle:parameterName")
- public int compareTo(final @Nullable PathArgument o) {
- if (o instanceof AugmentationIdentifier) {
- // Augmentations are strictly more, in keeping of their compare
- return 1;
- }
- if (!(o instanceof MountPointIdentifier other)) {
- // TODO: Yeah, okay, this declaration is not quite right, but we are following AugmentationIdenfier's lead
- return -1;
- }
- return getNodeType().compareTo(other.getNodeType());
- }
-
- @Override
- public QName getNodeType() {
- return getLabel().qname();
- }
-
- @Override
- public String toRelativeString(final @Nullable PathArgument previous) {
- return toString();
- }
-}
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-parser-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-api</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>rfc8528-model-api</artifactId>
requires transitive org.opendaylight.yangtools.yang.model.api;
requires transitive org.opendaylight.yangtools.yang.model.spi;
requires transitive org.opendaylight.yangtools.yang.parser.api;
- requires transitive org.opendaylight.yangtools.rfc8528.data.api;
requires org.opendaylight.yangtools.rfc8528.model.api;
requires org.opendaylight.yangtools.yang.common;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
-import java.io.Serial;
import java.io.Serializable;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
*/
public abstract sealed class YangInstanceIdentifier implements HierarchicalIdentifier<YangInstanceIdentifier>
permits FixedYangInstanceIdentifier, StackedYangInstanceIdentifier {
- @Serial
+ @java.io.Serial
private static final long serialVersionUID = 4L;
private static final VarHandle TO_STRING_CACHE;
private static final VarHandle HASH;
abstract int computeHashCode();
- @Serial
+ @java.io.Serial
final Object writeReplace() {
return new YIDv1(this);
}
* <li>{@link NodeWithValue} - Identifier of leaf-list entry
* </ul>
*/
- public interface PathArgument extends Comparable<PathArgument>, Immutable, Serializable {
+ public sealed interface PathArgument extends Comparable<PathArgument>, Immutable, Serializable
+ permits AbstractPathArgument, AugmentationIdentifier {
/**
* Returns unique QName of data node as defined in YANG Schema, if available.
*
@NonNull String toRelativeString(PathArgument previous);
}
- private abstract static class AbstractPathArgument implements PathArgument {
+ private abstract static sealed class AbstractPathArgument implements PathArgument {
private static final long serialVersionUID = -4546547994250849340L;
private final @NonNull QName nodeType;
private transient volatile int hashValue;
* Composite path argument identifying a {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode} leaf
* overall data tree.
*/
- public abstract static class NodeIdentifierWithPredicates extends AbstractPathArgument {
+ public abstract static sealed class NodeIdentifierWithPredicates extends AbstractPathArgument {
@Beta
public static final class Singleton extends NodeIdentifierWithPredicates {
private static final long serialVersionUID = 1L;
public class NormalizedNodesTest {
@Test
public void testGetDirectChild() {
- final var mockedPathArgument = mock(PathArgument.class);
+ final var mockedPathArgument = new NodeIdentifier(QName.create("test", "test"));
final var mockedLeafNode = mock(LeafNode.class);
assertEquals(Optional.empty(), NormalizedNodes.getDirectChild(mockedLeafNode, mockedPathArgument));
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-util</artifactId>
+ <artifactId>rfc8528-model-api</artifactId>
</dependency>
<dependency>
requires transitive org.opendaylight.yangtools.yang.data.util;
requires transitive org.opendaylight.yangtools.yang.model.api;
requires transitive org.opendaylight.yangtools.yang.model.spi;
- requires transitive org.opendaylight.yangtools.rfc8528.data.api;
- requires org.opendaylight.yangtools.rfc8528.data.util;
requires org.opendaylight.yangtools.yang.model.util;
requires org.opendaylight.yangtools.util;
requires org.slf4j;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
-import org.opendaylight.yangtools.yang.parser.api.YangParserException;
import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
final IllegalStateException ise = assertThrows(IllegalStateException.class,
() -> YangParserTestUtils.parseYangResourceDirectory("/leafref-context-test/incorrect-modules"));
final Throwable ype = ise.getCause();
- assertThat(ype, instanceOf(YangParserException.class));
final Throwable reactor = ype.getCause();
assertThat(reactor, instanceOf(ReactorException.class));
final Throwable source = reactor.getCause();
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.tree.api.CursorAwareDataTreeModification;
import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
final DataTreeCandidateNode mockedChildNode1 = mock(DataTreeCandidateNode.class);
doReturn(ModificationType.DELETE).when(mockedChildNode1).getModificationType();
- final PathArgument mockedPathArgument1 = mock(PathArgument.class);
- doReturn(mockedPathArgument1).when(mockedChildNode1).getIdentifier();
+ doReturn(new NodeIdentifier(QName.create("test", "test1"))).when(mockedChildNode1).getIdentifier();
final DataTreeCandidateNode mockedChildNode2 = mock(DataTreeCandidateNode.class);
doReturn(ModificationType.WRITE).when(mockedChildNode2).getModificationType();
final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class);
doReturn(Optional.of(mockedNormalizedNode)).when(mockedChildNode2).getDataAfter();
- final PathArgument mockedPathArgument2 = mock(PathArgument.class);
- doReturn(mockedPathArgument2).when(mockedChildNode2).getIdentifier();
+ doReturn(new NodeIdentifier(QName.create("test", "test2"))).when(mockedChildNode2).getIdentifier();
final DataTreeCandidateNode mockedChildNode3 = mock(DataTreeCandidateNode.class);
doReturn(ModificationType.SUBTREE_MODIFIED).when(mockedChildNode3).getModificationType();
final DataTreeCandidateNode mockedChildNode3ChildNode = mock(DataTreeCandidateNode.class);
doReturn(ModificationType.DELETE).when(mockedChildNode3ChildNode).getModificationType();
- final PathArgument mockedPathArgument31 = mock(PathArgument.class);
- final PathArgument mockedPathArgument3 = mock(PathArgument.class);
- doReturn(mockedPathArgument3).when(mockedChildNode3).getIdentifier();
- doReturn(mockedPathArgument31).when(mockedChildNode3ChildNode).getIdentifier();
+ doReturn(new NodeIdentifier(QName.create("test", "test3"))).when(mockedChildNode3).getIdentifier();
+ doReturn(new NodeIdentifier(QName.create("test", "test4"))).when(mockedChildNode3ChildNode).getIdentifier();
doReturn(List.of(mockedChildNode3ChildNode)).when(mockedChildNode3).getChildNodes();
final List<DataTreeCandidateNode> childNodes = List.of(mockedChildNode1, mockedChildNode2, mockedChildNode3);
package org.opendaylight.yangtools.yang.data.tree.spi;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doCallRealMethod;
import java.util.List;
import java.util.Optional;
import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
final NormalizedNodeDataTreeCandidateNode normalizedNodeDataTreeCandidateNode = new
NormalizedNodeDataTreeCandidateNode(mockedNormalizedNode);
- final PathArgument mockedPathArgument = mock(PathArgument.class);
+ final PathArgument mockedPathArgument = new NodeIdentifier(QName.create("test", "test"));
doReturn(mockedPathArgument).when(mockedNormalizedNode).getIdentifier();
- assertEquals(mockedPathArgument, normalizedNodeDataTreeCandidateNode.getIdentifier());
+ assertSame(mockedPathArgument, normalizedNodeDataTreeCandidateNode.getIdentifier());
final Collection<DataTreeCandidateNode> childNodes = normalizedNodeDataTreeCandidateNode.getChildNodes();
assertTrue(childNodes instanceof List);
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-xpath-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-api</artifactId>
- </dependency>
<!-- Test dependencies -->
<dependency>
requires transitive org.opendaylight.yangtools.yang.model.spi;
requires transitive org.opendaylight.yangtools.yang.model.util;
requires transitive org.opendaylight.yangtools.yang.xpath.api;
- requires transitive org.opendaylight.yangtools.rfc8528.data.api;
requires java.xml;
requires org.opendaylight.yangtools.yang.parser.api;
<artifactId>rfc8040-parser-support</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-api</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>rfc8528-data-util</artifactId>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-data-util</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-api</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>rfc8528-data-util</artifactId>