From: Robert Varga Date: Mon, 19 Jun 2023 12:03:25 +0000 (+0200) Subject: Bump upstreams X-Git-Tag: v6.0.0~25 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=c275eaa67b4b7fd1ea82a3cbcfc9415a19b41287;p=netconf.git Bump upstreams Adopt: - odlparent-13.0.1 - infrautils-6.0.0 - yangtools-11.0.0-SNAPSHOT - mdsal-12.0.0-SNAPSHOT - controller-8.0.0-SNAPSHOT - aaa-0.18.0-SNAPSHOT Handling of AugmentationIdentifier/AugmentationNode has been removed, as this indirection is no longer present in yang-data-api. The handling of PathArguments for the purposes of {Netconf,Writer}FieldsTranslator has been updated, as yangtools no longer provide wildcard PathArguments. Also the handling of DTCLs is updated, so that we serializer changed nodes in the same namespace first and then proceed to emit other namespaces in lexical order. JIRA: NETCONF-841 Change-Id: I6e8b9e834a33711387495e2cae52371ac456553d Signed-off-by: Robert Varga --- diff --git a/apps/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/ContextKey.java b/apps/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/ContextKey.java index f6f21c6740..729dff2a56 100644 --- a/apps/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/ContextKey.java +++ b/apps/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/ContextKey.java @@ -73,10 +73,10 @@ class ContextKey { final IpAddress yangIp; if (ipAddress instanceof Inet4Address) { - yangIp = new IpAddress(IetfInetUtil.INSTANCE.ipv4AddressFor(ipAddress)); + yangIp = new IpAddress(IetfInetUtil.ipv4AddressFor(ipAddress)); } else { checkArgument(ipAddress instanceof Inet6Address); - yangIp = new IpAddress(IetfInetUtil.INSTANCE.ipv6AddressFor(ipAddress)); + yangIp = new IpAddress(IetfInetUtil.ipv6AddressFor(ipAddress)); } return new ContextKey(yangIp, new PortNumber(Uint16.valueOf(inetSocketAddr.getPort()))); } diff --git a/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundSshServer.java b/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundSshServer.java index aca92575a6..32acf745f4 100644 --- a/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundSshServer.java +++ b/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundSshServer.java @@ -104,6 +104,6 @@ public final class NetconfNorthboundSshServer implements AutoCloseable { private static InetSocketAddress getInetAddress(final String bindingAddress, final int portNumber) { final var ipAddress = IetfInetUtil.ipAddressFor(bindingAddress); - return new InetSocketAddress(IetfInetUtil.INSTANCE.inetAddressFor(ipAddress), portNumber); + return new InetSocketAddress(IetfInetUtil.inetAddressFor(ipAddress), portNumber); } } diff --git a/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundTcpServer.java b/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundTcpServer.java index 392c922684..bc35f81c54 100644 --- a/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundTcpServer.java +++ b/apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundTcpServer.java @@ -69,7 +69,7 @@ public final class NetconfNorthboundTcpServer implements AutoCloseable { } private static InetSocketAddress getInetAddress(final String bindingAddress, final int portNumber) { - final var inetAd = IetfInetUtil.INSTANCE.inetAddressFor(IetfInetUtil.ipAddressFor(bindingAddress)); + final var inetAd = IetfInetUtil.inetAddressFor(IetfInetUtil.ipAddressFor(bindingAddress)); return new InetSocketAddress(inetAd, portNumber); } } diff --git a/apps/netconf-topology-impl/pom.xml b/apps/netconf-topology-impl/pom.xml index ed5b0f2b29..471949a2d0 100644 --- a/apps/netconf-topology-impl/pom.xml +++ b/apps/netconf-topology-impl/pom.xml @@ -24,6 +24,11 @@ org.opendaylight.netconf netconf-topology + + com.github.spotbugs + spotbugs-annotations + true + com.guicedee.services javax.inject diff --git a/apps/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java b/apps/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java index 86722755e8..57546b3e69 100644 --- a/apps/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java +++ b/apps/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java @@ -33,7 +33,7 @@ import org.opendaylight.netconf.dom.api.NetconfDataTreeService; import org.opendaylight.netconf.topology.singleton.messages.CreateInitialMasterActorData; import org.opendaylight.netconf.topology.spi.NetconfDeviceTopologyAdapter; import org.opendaylight.netconf.topology.spi.NetconfNodeUtils; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; import org.slf4j.Logger; diff --git a/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java b/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java index 3f943fb7b3..342819a631 100644 --- a/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java +++ b/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java @@ -140,8 +140,6 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -159,6 +157,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; @@ -311,8 +310,8 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { final var resources = resourceManager.getSchemaResources(TEST_DEFAULT_SUBDIR, "test"); resources.getSchemaRegistry().registerSchemaSource( - id -> Futures.immediateFuture(YangTextSchemaSource.delegateForByteSource(id, - topModuleInfo.getYangTextByteSource())), + id -> Futures.immediateFuture(YangTextSchemaSource.delegateForCharSource(id, + topModuleInfo.getYangTextCharSource())), PotentialSchemaSource.create(new SourceIdentifier(TOP_MODULE_NAME, topModuleInfo.getName().getRevision().map(Revision::toString).orElse(null)), YangTextSchemaSource.class, 1)); @@ -413,7 +412,7 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { final var masterSalFacade = masterSalFacadeFuture.get(5, TimeUnit.SECONDS); masterSalFacade.onDeviceConnected(new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), - new EmptyMountPointContext(deviceSchemaContext)), + MountPointContext.of(deviceSchemaContext)), NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE)), new RemoteDeviceServices(deviceRpcService, null)); @@ -485,7 +484,7 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { final var masterSalFacade = masterSalFacadeFuture.get(5, TimeUnit.SECONDS); masterSalFacade.onDeviceConnected( - new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), new EmptyMountPointContext(deviceSchemaContext)), + new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), MountPointContext.of(deviceSchemaContext)), NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE)), new RemoteDeviceServices(deviceRpcService, null)); diff --git a/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java b/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java index 6b88c81312..de8ef3a3a1 100644 --- a/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java +++ b/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java @@ -7,7 +7,6 @@ */ package org.opendaylight.netconf.topology.singleton.impl; -import static java.nio.charset.StandardCharsets.UTF_8; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.startsWith; @@ -44,19 +43,17 @@ import akka.testkit.TestActorRef; import akka.testkit.javadsl.TestKit; import akka.util.Timeout; import com.google.common.collect.ImmutableList; -import com.google.common.io.ByteSource; +import com.google.common.io.CharSource; import com.google.common.net.InetAddresses; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; -import java.io.InputStream; import java.net.InetSocketAddress; import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.Scanner; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.junit.After; @@ -457,8 +454,8 @@ public class NetconfNodeActorTest extends AbstractBaseSchemasTest { final ProxyYangTextSourceProvider proxyYangProvider = new ProxyYangTextSourceProvider(masterRef, system.dispatcher(), TIMEOUT); - final YangTextSchemaSource yangTextSchemaSource = YangTextSchemaSource.delegateForByteSource(sourceIdentifier, - ByteSource.wrap("YANG".getBytes(UTF_8))); + final YangTextSchemaSource yangTextSchemaSource = YangTextSchemaSource.delegateForCharSource(sourceIdentifier, + CharSource.wrap("YANG")); // Test success. @@ -472,7 +469,7 @@ public class NetconfNodeActorTest extends AbstractBaseSchemasTest { final YangTextSchemaSourceSerializationProxy success = Await.result(resolvedSchemaFuture, TIMEOUT.duration()); assertEquals(sourceIdentifier, success.getRepresentation().getIdentifier()); - assertEquals("YANG", convertStreamToString(success.getRepresentation().openStream())); + assertEquals("YANG", success.getRepresentation().read()); // Test missing source failure. @@ -724,10 +721,4 @@ public class NetconfNodeActorTest extends AbstractBaseSchemasTest { private static PotentialSchemaSource withSourceId(final SourceIdentifier identifier) { return argThat(argument -> identifier.equals(argument.getSourceIdentifier())); } - - private static String convertStreamToString(final InputStream is) { - try (Scanner scanner = new Scanner(is)) { - return scanner.useDelimiter("\\A").hasNext() ? scanner.next() : ""; - } - } } diff --git a/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeManagerTest.java b/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeManagerTest.java index 6354ca5da8..6d586514cd 100644 --- a/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeManagerTest.java +++ b/apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeManagerTest.java @@ -7,7 +7,6 @@ */ package org.opendaylight.netconf.topology.singleton.impl; -import static java.nio.charset.StandardCharsets.UTF_8; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.after; @@ -30,7 +29,7 @@ import akka.testkit.TestActorRef; import akka.testkit.javadsl.TestKit; import akka.util.Timeout; import com.google.common.collect.Iterables; -import com.google.common.io.ByteSource; +import com.google.common.io.CharSource; import com.google.common.util.concurrent.Futures; import com.typesafe.config.ConfigFactory; import java.net.InetSocketAddress; @@ -160,8 +159,8 @@ public class NetconfNodeManagerTest extends AbstractBaseSchemasTest { SOURCE_IDENTIFIERS.stream().map( sourceId -> masterSchemaRepository.registerSchemaSource( - id -> Futures.immediateFuture(YangTextSchemaSource.delegateForByteSource(id, - ByteSource.wrap(yangTemplate.replaceAll("ID", id.name().getLocalName()).getBytes(UTF_8)))), + id -> Futures.immediateFuture(YangTextSchemaSource.delegateForCharSource(id, + CharSource.wrap(yangTemplate.replaceAll("ID", id.name().getLocalName())))), PotentialSchemaSource.create(sourceId, YangTextSchemaSource.class, 1))) .collect(Collectors.toList()); diff --git a/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java b/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java index 0e1c847163..a3b0542238 100644 --- a/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java +++ b/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java @@ -67,7 +67,7 @@ public final class NetconfNodeUtils { final var host = node.requireHost(); final int port = node.requirePort().getValue().toJava(); final var ipAddress = host.getIpAddress(); - return ipAddress != null ? new InetSocketAddress(IetfInetUtil.INSTANCE.inetAddressFor(ipAddress), port) + return ipAddress != null ? new InetSocketAddress(IetfInetUtil.inetAddressFor(ipAddress), port) : new InetSocketAddress(host.getDomainName().getValue(), port); } diff --git a/apps/pom.xml b/apps/pom.xml index 37ff0bc8ea..dd8edb5661 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/artifacts/pom.xml b/artifacts/pom.xml index 5c4ac9fcf7..4431099bf6 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -14,7 +14,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/features/features-netconf-experimental/pom.xml b/features/features-netconf-experimental/pom.xml index a3b2bba6e4..66f87d3a15 100644 --- a/features/features-netconf-experimental/pom.xml +++ b/features/features-netconf-experimental/pom.xml @@ -14,7 +14,7 @@ org.opendaylight.odlparent feature-repo-parent - 12.0.6 + 13.0.1 diff --git a/features/features-netconf-testing/pom.xml b/features/features-netconf-testing/pom.xml index 4cad6cc824..b65624d27a 100644 --- a/features/features-netconf-testing/pom.xml +++ b/features/features-netconf-testing/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent feature-repo-parent - 12.0.6 + 13.0.1 diff --git a/features/features-netconf/pom.xml b/features/features-netconf/pom.xml index f63151eba9..c880546842 100644 --- a/features/features-netconf/pom.xml +++ b/features/features-netconf/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent feature-repo-parent - 12.0.6 + 13.0.1 diff --git a/features/odl-aaa-netconf-plugin/src/main/feature/feature.xml b/features/odl-aaa-netconf-plugin/src/main/feature/feature.xml index 6f3f01a301..3b0f8a4b59 100644 --- a/features/odl-aaa-netconf-plugin/src/main/feature/feature.xml +++ b/features/odl-aaa-netconf-plugin/src/main/feature/feature.xml @@ -7,6 +7,6 @@ --> - odl-aaa-shiro + odl-aaa-shiro diff --git a/features/odl-netconf-api/src/main/feature/feature.xml b/features/odl-netconf-api/src/main/feature/feature.xml index 0349f5548b..496c9002d7 100644 --- a/features/odl-netconf-api/src/main/feature/feature.xml +++ b/features/odl-netconf-api/src/main/feature/feature.xml @@ -8,7 +8,7 @@ --> - odl-netty-4 - odl-mdsal-model-rfc8525 + odl-netty-4 + odl-mdsal-model-rfc8525 diff --git a/features/odl-netconf-client/src/main/feature/feature.xml b/features/odl-netconf-client/src/main/feature/feature.xml index 45686d3132..8a95fcc95e 100644 --- a/features/odl-netconf-client/src/main/feature/feature.xml +++ b/features/odl-netconf-client/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-controller-exp-netty-config + odl-controller-exp-netty-config diff --git a/features/odl-netconf-connector/src/main/feature/feature.xml b/features/odl-netconf-connector/src/main/feature/feature.xml index e311ab7389..25836d6db5 100644 --- a/features/odl-netconf-connector/src/main/feature/feature.xml +++ b/features/odl-netconf-connector/src/main/feature/feature.xml @@ -8,8 +8,8 @@ --> - odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal - odl-mdsal-broker - odl-aaa-encryption-service + odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal + odl-mdsal-broker + odl-aaa-encryption-service diff --git a/features/odl-netconf-impl/src/main/feature/feature.xml b/features/odl-netconf-impl/src/main/feature/feature.xml index 508df3fb90..46ce8c13cc 100644 --- a/features/odl-netconf-impl/src/main/feature/feature.xml +++ b/features/odl-netconf-impl/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-controller-exp-netty-config + odl-controller-exp-netty-config diff --git a/features/odl-netconf-model-rfc5277/src/main/feature/feature.xml b/features/odl-netconf-model-rfc5277/src/main/feature/feature.xml index c505caf865..3bf3acf699 100644 --- a/features/odl-netconf-model-rfc5277/src/main/feature/feature.xml +++ b/features/odl-netconf-model-rfc5277/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-model-rfc6991 + odl-mdsal-model-rfc6991 diff --git a/features/odl-netconf-model-rfc6022/src/main/feature/feature.xml b/features/odl-netconf-model-rfc6022/src/main/feature/feature.xml index 64f21e5c96..d1e0bad692 100644 --- a/features/odl-netconf-model-rfc6022/src/main/feature/feature.xml +++ b/features/odl-netconf-model-rfc6022/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-model-rfc6991 + odl-mdsal-model-rfc6991 diff --git a/features/odl-netconf-model-rfc6241/src/main/feature/feature.xml b/features/odl-netconf-model-rfc6241/src/main/feature/feature.xml index 5eb64b969e..6af212fd2d 100644 --- a/features/odl-netconf-model-rfc6241/src/main/feature/feature.xml +++ b/features/odl-netconf-model-rfc6241/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-model-rfc6991 + odl-mdsal-model-rfc6991 diff --git a/features/odl-netconf-model-rfc8040/src/main/feature/feature.xml b/features/odl-netconf-model-rfc8040/src/main/feature/feature.xml index 652c8e3779..d083b39d46 100644 --- a/features/odl-netconf-model-rfc8040/src/main/feature/feature.xml +++ b/features/odl-netconf-model-rfc8040/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-model-rfc6991 + odl-mdsal-model-rfc6991 diff --git a/features/odl-netconf-model-rfc8341/src/main/feature/feature.xml b/features/odl-netconf-model-rfc8341/src/main/feature/feature.xml index 58604263a7..37e0626c9f 100644 --- a/features/odl-netconf-model-rfc8341/src/main/feature/feature.xml +++ b/features/odl-netconf-model-rfc8341/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-model-rfc6991 + odl-mdsal-model-rfc6991 diff --git a/features/odl-netconf-model-rfc8526/src/main/feature/feature.xml b/features/odl-netconf-model-rfc8526/src/main/feature/feature.xml index e3686dac4e..4dd9b2915a 100644 --- a/features/odl-netconf-model-rfc8526/src/main/feature/feature.xml +++ b/features/odl-netconf-model-rfc8526/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-model-rfc8342 + odl-mdsal-model-rfc8342 diff --git a/features/odl-netconf-model-rfc8639/src/main/feature/feature.xml b/features/odl-netconf-model-rfc8639/src/main/feature/feature.xml index 2b38f01ea4..9fdffe4621 100644 --- a/features/odl-netconf-model-rfc8639/src/main/feature/feature.xml +++ b/features/odl-netconf-model-rfc8639/src/main/feature/feature.xml @@ -8,9 +8,9 @@ --> - odl-mdsal-model-rfc8040 - odl-mdsal-model-rfc8343 - odl-mdsal-model-rfc8528 - odl-mdsal-model-rfc8529 + odl-mdsal-model-rfc8040 + odl-mdsal-model-rfc8343 + odl-mdsal-model-rfc8528 + odl-mdsal-model-rfc8529 diff --git a/features/odl-netconf-netty-util/src/main/feature/feature.xml b/features/odl-netconf-netty-util/src/main/feature/feature.xml index 499aab2515..4cf8778f74 100644 --- a/features/odl-netconf-netty-util/src/main/feature/feature.xml +++ b/features/odl-netconf-netty-util/src/main/feature/feature.xml @@ -1,7 +1,7 @@ - odl-netty-4 - odl-aaa-encryption-service + odl-netty-4 + odl-aaa-encryption-service diff --git a/features/odl-netconf-transport-api/src/main/feature/feature.xml b/features/odl-netconf-transport-api/src/main/feature/feature.xml index 1e592d5307..aa63f407ce 100644 --- a/features/odl-netconf-transport-api/src/main/feature/feature.xml +++ b/features/odl-netconf-transport-api/src/main/feature/feature.xml @@ -8,7 +8,7 @@ --> - odl-netty-4 - odl-yangtools-common + odl-netty-4 + odl-yangtools-common diff --git a/features/odl-netconf-util/src/main/feature/feature.xml b/features/odl-netconf-util/src/main/feature/feature.xml index 7ea41309d0..bb732998b7 100644 --- a/features/odl-netconf-util/src/main/feature/feature.xml +++ b/features/odl-netconf-util/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-yangtools-codec + odl-yangtools-codec diff --git a/features/odl-restconf-common/src/main/feature/feature.xml b/features/odl-restconf-common/src/main/feature/feature.xml index 8894da117f..a2d5e9d3bb 100644 --- a/features/odl-restconf-common/src/main/feature/feature.xml +++ b/features/odl-restconf-common/src/main/feature/feature.xml @@ -8,11 +8,11 @@ --> - odl-karaf-feat-jetty - odl-yangtools-export - odl-mdsal-model-rfc8040 - odl-mdsal-model-rfc8525 - odl-mdsal-broker - odl-aaa-shiro + odl-karaf-feat-jetty + odl-yangtools-export + odl-mdsal-model-rfc8040 + odl-mdsal-model-rfc8525 + odl-mdsal-broker + odl-aaa-shiro diff --git a/features/odl-restconf-nb/src/main/feature/feature.xml b/features/odl-restconf-nb/src/main/feature/feature.xml index 79e8c6f56d..dc53f8a52c 100644 --- a/features/odl-restconf-nb/src/main/feature/feature.xml +++ b/features/odl-restconf-nb/src/main/feature/feature.xml @@ -8,8 +8,8 @@ --> - odl-mdsal-model-rfc8072 - odl-controller-exp-netty-config + odl-mdsal-model-rfc8072 + odl-controller-exp-netty-config mvn:org.opendaylight.netconf/restconf-nb/${project.version}/cfg/config diff --git a/features/odl-restconf-openapi/src/main/feature/feature.xml b/features/odl-restconf-openapi/src/main/feature/feature.xml index 563b38fd03..c53f83bb69 100644 --- a/features/odl-restconf-openapi/src/main/feature/feature.xml +++ b/features/odl-restconf-openapi/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-jackson-2 + odl-jackson-2 diff --git a/features/odl-yanglib/src/main/feature/feature.xml b/features/odl-yanglib/src/main/feature/feature.xml index 246b91782a..8f4869c63b 100644 --- a/features/odl-yanglib/src/main/feature/feature.xml +++ b/features/odl-yanglib/src/main/feature/feature.xml @@ -8,8 +8,8 @@ --> - odl-karaf-feat-jetty - odl-mdsal-model-rfc8525 + odl-karaf-feat-jetty + odl-mdsal-model-rfc8525 mvn:org.opendaylight.netconf/yanglib/${project.version}/xml/config diff --git a/features/parent/pom.xml b/features/parent/pom.xml index 5eb7d78e1a..ca0849dfeb 100644 --- a/features/parent/pom.xml +++ b/features/parent/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent single-feature-parent - 12.0.6 + 13.0.1 diff --git a/features/pom.xml b/features/pom.xml index af4e508a97..a674161d00 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/karaf-static/pom.xml b/karaf-static/pom.xml index 8a6f902da5..7405320781 100644 --- a/karaf-static/pom.xml +++ b/karaf-static/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent karaf-dist-static - 12.0.6 + 13.0.1 diff --git a/karaf/pom.xml b/karaf/pom.xml index 9fe02b716f..57156eceae 100644 --- a/karaf/pom.xml +++ b/karaf/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent karaf4-parent - 12.0.6 + 13.0.1 org.opendaylight.netconf @@ -24,14 +24,14 @@ org.opendaylight.infrautils infrautils-artifacts - 5.0.5 + 6.0.0 pom import org.opendaylight.controller controller-artifacts - 7.0.8 + 8.0.0-SNAPSHOT pom import diff --git a/keystore/pom.xml b/keystore/pom.xml index ff76f3ae12..0d14c5ab81 100644 --- a/keystore/pom.xml +++ b/keystore/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/model/pom.xml b/model/pom.xml index 83959aabe2..0a6fb0b69e 100644 --- a/model/pom.xml +++ b/model/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/netconf/callhome-protocol/pom.xml b/netconf/callhome-protocol/pom.xml index 296d70dc56..d5d8067ce9 100644 --- a/netconf/callhome-protocol/pom.xml +++ b/netconf/callhome-protocol/pom.xml @@ -20,6 +20,11 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + com.google.guava guava diff --git a/netconf/netconf-config/pom.xml b/netconf/netconf-config/pom.xml index 7ec0dca3f4..18c1daca23 100644 --- a/netconf/netconf-config/pom.xml +++ b/netconf/netconf-config/pom.xml @@ -24,6 +24,10 @@ com.google.guava guava + + org.eclipse.jdt + org.eclipse.jdt.annotation + org.opendaylight.controller threadpool-config-api diff --git a/netconf/netconf-netty-util/pom.xml b/netconf/netconf-netty-util/pom.xml index a6a6006da9..19ecbfc5d8 100644 --- a/netconf/netconf-netty-util/pom.xml +++ b/netconf/netconf-netty-util/pom.xml @@ -22,6 +22,11 @@ + + com.github.spotbugs + spotbugs-annotations + true + com.google.guava guava diff --git a/netconf/pom.xml b/netconf/pom.xml index 2380af7707..3f7a459431 100644 --- a/netconf/pom.xml +++ b/netconf/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/netconf/tools/netconf-testtool/pom.xml b/netconf/tools/netconf-testtool/pom.xml index c4e0b8c038..e1bf3c4dd1 100644 --- a/netconf/tools/netconf-testtool/pom.xml +++ b/netconf/tools/netconf-testtool/pom.xml @@ -27,6 +27,11 @@ + + com.github.spotbugs + spotbugs-annotations + true + org.codehaus.janino janino @@ -96,7 +101,7 @@ org.opendaylight.mdsal.binding.model.ietf - rfc6991 + rfc6991-ietf-inet-types org.opendaylight.mdsal diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java index e1cc67b3d4..969de76fcc 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java @@ -24,7 +24,6 @@ import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.UnknownHostException; import java.nio.channels.AsynchronousChannelGroup; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -355,8 +354,7 @@ public class NetconfDeviceSimulator implements Closeable { final String moduleContent; try { - moduleContent = consumer.getSchemaSource(sourceId, YangTextSchemaSource.class).get() - .asCharSource(StandardCharsets.UTF_8).read(); + moduleContent = consumer.getSchemaSource(sourceId, YangTextSchemaSource.class).get().read(); } catch (ExecutionException | InterruptedException | IOException e) { throw new IllegalStateException( "Cannot retrieve schema source for module " + sourceId + " from schema repository", e); diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/MonitoringSession.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/MonitoringSession.java index 65bb85bc8e..e0ff1374bf 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/MonitoringSession.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/MonitoringSession.java @@ -10,10 +10,10 @@ package org.opendaylight.netconf.test.tool.monitoring; import com.google.common.base.Joiner; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlTransient; -import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.monitoring.rev220718.Session1; +import org.opendaylight.yangtools.yang.binding.contract.Naming; import org.opendaylight.yangtools.yang.common.QName; final class MonitoringSession { @@ -76,7 +76,7 @@ final class MonitoringSession { public String getTransport() { try { final QName qualifiedName = (QName) managementSession.getTransport().implementedInterface() - .getField(BindingMapping.QNAME_STATIC_FIELD_NAME).get(null); + .getField(Naming.QNAME_STATIC_FIELD_NAME).get(null); // Add extension prefix if transport type is from extension yang module if (qualifiedName.getNamespace().toString().equals(MonitoringConstants.EXTENSION_NAMESPACE)) { return Joiner.on(':').join(MonitoringConstants.EXTENSION_NAMESPACE_PREFIX, diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java index 7e8c852314..f475872e34 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java @@ -98,8 +98,8 @@ public final class SchemaSourceCache exten public synchronized ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { final YangModuleInfo yangModuleInfo = cachedSchemas.get(sourceIdentifier); if (yangModuleInfo != null) { - final YangTextSchemaSource yangTextSchemaSource = YangTextSchemaSource.delegateForByteSource( - sourceIdentifier, yangModuleInfo.getYangTextByteSource()); + final YangTextSchemaSource yangTextSchemaSource = YangTextSchemaSource.delegateForCharSource( + sourceIdentifier, yangModuleInfo.getYangTextCharSource()); return Futures.immediateFuture(representation.cast(yangTextSchemaSource)); } diff --git a/netconf/tools/pom.xml b/netconf/tools/pom.xml index 3c6ec45096..6407d5f711 100644 --- a/netconf/tools/pom.xml +++ b/netconf/tools/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java index c5fc37679f..1806f1c9e2 100644 --- a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java +++ b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java @@ -16,7 +16,6 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.MoreExecutors; import java.io.File; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -195,7 +194,7 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener, Yan final var yangTextSchemaFuture = schemaRepository.getSchemaSource(sourceId, YangTextSchemaSource.class); try { final var yangTextSchemaSource = yangTextSchemaFuture.get(); - return yangTextSchemaSource.asCharSource(StandardCharsets.UTF_8).read(); + return yangTextSchemaSource.read(); } catch (ExecutionException e) { if (e.getCause() instanceof MissingSchemaSourceException) { throw new NotFoundException("Schema source " + sourceId + " not found", e); diff --git a/parent/pom.xml b/parent/pom.xml index 2f58f6c9d4..99385c9fbd 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.mdsal binding-parent - 11.0.11 + 12.0.0-SNAPSHOT @@ -25,21 +25,21 @@ org.opendaylight.infrautils infrautils-artifacts - 5.0.5 + 6.0.0 pom import org.opendaylight.aaa aaa-artifacts - 0.17.10 + 0.18.0-SNAPSHOT pom import org.opendaylight.controller bundle-parent - 7.0.8 + 8.0.0-SNAPSHOT pom import diff --git a/plugins/netconf-client-mdsal/pom.xml b/plugins/netconf-client-mdsal/pom.xml index d08270c946..662a305813 100644 --- a/plugins/netconf-client-mdsal/pom.xml +++ b/plugins/netconf-client-mdsal/pom.xml @@ -43,22 +43,6 @@ org.opendaylight.yangtools concepts - - org.opendaylight.yangtools - rfc7952-data-api - - - org.opendaylight.yangtools - rfc7952-data-util - - - org.opendaylight.yangtools - rfc8528-data-api - - - org.opendaylight.yangtools - rfc8528-data-util - org.opendaylight.yangtools rfc8528-model-api diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/CachedYangTextSchemaSource.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/CachedYangTextSchemaSource.java index d72834d147..1e222233d0 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/CachedYangTextSchemaSource.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/CachedYangTextSchemaSource.java @@ -10,8 +10,8 @@ package org.opendaylight.netconf.client.mdsal; import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; -import java.io.ByteArrayInputStream; -import java.io.InputStream; +import java.io.Reader; +import java.io.StringReader; import java.util.Optional; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -22,15 +22,15 @@ import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; */ public final class CachedYangTextSchemaSource extends YangTextSchemaSource { private final RemoteDeviceId id; - private final byte[] schemaBytes; + private final String schemaString; private final String symbolicName; public CachedYangTextSchemaSource(final RemoteDeviceId id, final SourceIdentifier sourceIdentifier, - final String symbolicName, final byte[] schemaBytes) { + final String symbolicName, final String schemaString) { super(sourceIdentifier); this.symbolicName = requireNonNull(symbolicName); this.id = requireNonNull(id); - this.schemaBytes = schemaBytes.clone(); + this.schemaString = requireNonNull(schemaString); } @Override @@ -39,8 +39,8 @@ public final class CachedYangTextSchemaSource extends YangTextSchemaSource { } @Override - public InputStream openStream() { - return new ByteArrayInputStream(schemaBytes); + public Reader openStream() { + return new StringReader(schemaString); } @Override diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/DeviceMountPointContext.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/DeviceMountPointContext.java index e535cd4ac8..8024bfff9e 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/DeviceMountPointContext.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/DeviceMountPointContext.java @@ -17,10 +17,8 @@ import java.util.Map; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; import org.opendaylight.yangtools.rfc8528.model.api.SchemaMountConstants; +import org.opendaylight.yangtools.yang.common.MountPointLabel; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -30,6 +28,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider; @@ -57,10 +57,10 @@ final class DeviceMountPointContext extends AbstractEffectiveModelContextProvide private static final NodeIdentifier PARENT_REFERENCE = NodeIdentifier.create( QName.create(SchemaMountConstants.RFC8528_MODULE, "parent-reference").intern()); - private final ImmutableMap mountPoints; + private final ImmutableMap mountPoints; private DeviceMountPointContext(final EffectiveModelContext schemaContext, - final Map mountPoints) { + final Map mountPoints) { super(schemaContext); this.mountPoints = ImmutableMap.copyOf(mountPoints); } @@ -76,7 +76,7 @@ final class DeviceMountPointContext extends AbstractEffectiveModelContextProvide final DataContainerChild mountPoint = optMountPoint.orElseThrow(); checkArgument(mountPoint instanceof MapNode, "mount-point list %s is not a MapNode", mountPoint); - final Map mountPoints = new HashMap<>(); + final Map mountPoints = new HashMap<>(); for (MapEntryNode entry : ((MapNode) mountPoint).body()) { final String moduleName = entry.findChildByArg(MODULE).map(mod -> { checkArgument(mod instanceof LeafNode, "Unexpected module leaf %s", mod); @@ -88,7 +88,7 @@ final class DeviceMountPointContext extends AbstractEffectiveModelContextProvide checkArgument(it.hasNext(), "Failed to find a module named %s", moduleName); final QNameModule module = it.next().getQNameModule(); - final MountPointIdentifier mountId = MountPointIdentifier.of(QName.create(module, + final MountPointLabel mountId = new MountPointLabel(QName.create(module, entry.findChildByArg(LABEL).map(lbl -> { checkArgument(lbl instanceof LeafNode, "Unexpected label leaf %s", lbl); final Object value = lbl.body(); @@ -114,7 +114,7 @@ final class DeviceMountPointContext extends AbstractEffectiveModelContextProvide } @Override - public Optional findMountPoint(@NonNull final MountPointIdentifier label) { + public Optional findMountPoint(@NonNull final MountPointLabel label) { return Optional.ofNullable(mountPoints.get(requireNonNull(label))); } } diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibraryModulesSchemas.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibraryModulesSchemas.java index afd506e2e2..b275f763fe 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibraryModulesSchemas.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibraryModulesSchemas.java @@ -62,6 +62,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizationResult; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; @@ -69,7 +70,7 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; @@ -285,7 +286,7 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { } private static Optional readJson(final InputStream in) { - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final JsonParserStream jsonParser = JsonParserStream.create(writer, JSON_CODECS); @@ -293,7 +294,8 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { jsonParser.parse(reader); - return resultHolder.isFinished() ? Optional.of(resultHolder.getResult()) : Optional.empty(); + final NormalizationResult result = resultHolder.result(); + return result == null ? Optional.empty() : Optional.of(result.data()); } private static Optional readXml(final InputStream in) { @@ -320,11 +322,11 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { } } - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final XmlParserStream xmlParser = XmlParserStream.create(writer, MODULES_STATE_INFERENCE); xmlParser.traverse(new DOMSource(doc.getDocumentElement())); - return Optional.of(resultHolder.getResult()); + return Optional.of(resultHolder.getResult().data()); } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) { LOG.warn("Unable to parse yang library xml content", e); } diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaSourceProvider.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaSourceProvider.java index e142e27b42..165261de70 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaSourceProvider.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaSourceProvider.java @@ -15,6 +15,7 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Map; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; @@ -53,7 +54,8 @@ public final class LibrarySchemaSourceProvider implements SchemaSourceProvider { private ListenableFuture<@NonNull MountPointContext> createMountPointContext( final EffectiveModelContext schemaContext, final BaseSchema baseSchema, final NetconfDeviceCommunicator listener) { - final MountPointContext emptyContext = new EmptyMountPointContext(schemaContext); + final MountPointContext emptyContext = MountPointContext.of(schemaContext); if (schemaContext.findModule(SchemaMountConstants.RFC8528_MODULE).isEmpty()) { return Futures.immediateFuture(emptyContext); } diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfDeviceSchema.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfDeviceSchema.java index 6b6dff844e..4805400158 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfDeviceSchema.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfDeviceSchema.java @@ -10,7 +10,7 @@ package org.opendaylight.netconf.client.mdsal; import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; /** diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfMountPointContextFactory.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfMountPointContextFactory.java index 5494aa7699..561484691b 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfMountPointContextFactory.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfMountPointContextFactory.java @@ -8,25 +8,23 @@ package org.opendaylight.netconf.client.mdsal; import java.util.Map; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointChild; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; -import org.opendaylight.yangtools.rfc8528.data.api.YangLibraryConstants.ContainerName; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointChild; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.parser.api.YangParserException; // TODO: this should really come from mdsal-yanglib-rfc8525 final class NetconfMountPointContextFactory implements MountPointContextFactory { - private final MountPointContext mountPoint; + private final @NonNull MountPointContext mountPoint; NetconfMountPointContextFactory(final EffectiveModelContext schemaContext) { - mountPoint = new EmptyMountPointContext(schemaContext); + mountPoint = MountPointContext.of(schemaContext); } @Override public MountPointContext createContext(final Map libraryContainers, - final MountPointChild schemaMounts) throws YangParserException { + final MountPointChild schemaMounts) { return mountPoint; } } diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemas.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemas.java index 433442a50a..eb78b1f2dc 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemas.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemas.java @@ -208,7 +208,8 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { final NormalizedNode dataNode; try { - dataNode = NormalizedDataUtil.transformDOMSourceToNormalizedNode(schemaContext, filteredBody).getResult(); + dataNode = NormalizedDataUtil.transformDOMSourceToNormalizedNode(schemaContext, filteredBody).getResult() + .data(); } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) { LOG.warn("Failed to transform {}", rpcResult, e); return Optional.empty(); diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/api/RemoteDeviceId.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/api/RemoteDeviceId.java index 2ae1c48a09..8ac1d3e75a 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/api/RemoteDeviceId.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/api/RemoteDeviceId.java @@ -23,7 +23,7 @@ public record RemoteDeviceId(@NonNull String name, @NonNull InetSocketAddress ad public @NonNull Host host() { final var addr = address.getAddress(); - return addr != null ? new Host(IetfInetUtil.INSTANCE.ipAddressFor(addr)) + return addr != null ? new Host(IetfInetUtil.ipAddressFor(addr)) : new Host(new DomainName(address.getHostString())); } } diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/BaseSchema.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/BaseSchema.java index 571970b6cf..bc40068392 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/BaseSchema.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/BaseSchema.java @@ -11,18 +11,18 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; public final class BaseSchema implements EffectiveModelContextProvider, Immutable { private final @NonNull ImmutableMap mappedRpcs; - private final @NonNull EmptyMountPointContext mountContext; + private final @NonNull MountPointContext mountContext; BaseSchema(final EffectiveModelContext context) { - mountContext = new EmptyMountPointContext(context); + mountContext = MountPointContext.of(context); mappedRpcs = Maps.uniqueIndex(context.getOperations(), RpcDefinition::getQName); } @@ -30,7 +30,7 @@ public final class BaseSchema implements EffectiveModelContextProvider, Immutabl return mappedRpcs; } - public @NonNull EmptyMountPointContext getMountPointContext() { + public @NonNull MountPointContext getMountPointContext() { return mountContext; } diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOps.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOps.java index 5058cda43a..29829c4e6d 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOps.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOps.java @@ -55,7 +55,6 @@ import org.opendaylight.netconf.client.mdsal.api.NetconfRpcService; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.copy.config.input.target.ConfigTarget; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.get.config.input.source.ConfigSource; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -63,6 +62,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformUtil.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformUtil.java index 1f7760c58b..a341937995 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformUtil.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformUtil.java @@ -7,6 +7,7 @@ */ package org.opendaylight.netconf.client.mdsal.impl; +import static java.util.Objects.requireNonNull; import static org.opendaylight.netconf.common.mdsal.NormalizedDataUtil.NETCONF_DATA_QNAME; import static org.opendaylight.netconf.common.mdsal.NormalizedDataUtil.NETCONF_QNAME; @@ -17,7 +18,6 @@ import java.time.Instant; import java.time.format.DateTimeParseException; import java.util.ArrayDeque; import java.util.Collection; -import java.util.Deque; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -42,9 +42,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.re import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange; -import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata; -import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata; -import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata.Builder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangConstants; @@ -57,16 +54,19 @@ import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedMetadata; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.YangInstanceIdentifierWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedMetadata; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.data.impl.schema.SchemaOrderedNormalizedNodeWriter; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.PathMixin; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; @@ -88,10 +88,6 @@ public final class NetconfMessageTransformUtil { // Blank document used for creation of new DOM nodes private static final Document BLANK_DOCUMENT = XmlUtil.newDocument(); - private NetconfMessageTransformUtil() { - - } - public static final @NonNull QName IETF_NETCONF_MONITORING = QName.create(NetconfState.QNAME, "ietf-netconf-monitoring").intern(); public static final @NonNull QName GET_DATA_QNAME = QName.create(IETF_NETCONF_MONITORING, "data").intern(); @@ -204,6 +200,10 @@ public final class NetconfMessageTransformUtil { public static final @NonNull AnyxmlNode EMPTY_FILTER = buildFilterStructure(getNetconfFilterElement()); + private NetconfMessageTransformUtil() { + // Hidden on purpose + } + /** * Creation of the subtree filter structure using {@link YangInstanceIdentifier} path. * @@ -318,14 +318,15 @@ public final class NetconfMessageTransformUtil { // into xml final var parentPath = dataPath.isEmpty() ? dataPath : dataPath.coerceParent(); - var result = new NormalizedNodeResult(); + var result = new NormalizationResultHolder(); try (var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result)) { try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, ctx, parentPath); var nnWriter = NormalizedNodeWriter.forStreamWriter(streamWriter)) { nnWriter.write(lastChildOverride.orElseThrow()); } } - NormalizedDataUtil.writeNormalizedNode(result.getResult(), metadata, new DOMResult(element), ctx, null); + NormalizedDataUtil.writeNormalizedNode(result.getResult().data(), metadata, new DOMResult(element), ctx, + null); } else { NormalizedDataUtil.writeNormalizedNode(dataPath, metadata, new DOMResult(element), ctx, null); } @@ -338,23 +339,31 @@ public final class NetconfMessageTransformUtil { } private static NormalizedMetadata leafMetadata(final YangInstanceIdentifier path, final EffectiveOperation oper) { - final List args = path.getPathArguments(); - final Deque builders = new ArrayDeque<>(args.size()); + record BuilderAndArg(ImmutableNormalizedMetadata.Builder builder, PathArgument arg) { + BuilderAndArg { + requireNonNull(builder); + requireNonNull(arg); + } + } + + final var args = path.getPathArguments(); + final var builders = new ArrayDeque(args.size()); // Step one: open builders for (PathArgument arg : args) { - builders.push(ImmutableNormalizedMetadata.builder().withIdentifier(arg)); + builders.push(new BuilderAndArg(ImmutableNormalizedMetadata.builder(), arg)); } // Step two: set the top builder's metadata - builders.peek().withAnnotation(NETCONF_OPERATION_QNAME_LEGACY, oper.toString().toLowerCase(Locale.US)); + builders.peek().builder.withAnnotation(NETCONF_OPERATION_QNAME_LEGACY, oper.toString().toLowerCase(Locale.US)); // Step three: build the tree while (true) { - final ImmutableNormalizedMetadata currentMeta = builders.pop().build(); - final Builder parent = builders.peek(); + final var current = builders.pop(); + final var currentMeta = current.builder.build(); + final var parent = builders.peek(); if (parent != null) { - parent.withChild(currentMeta); + parent.builder.withChild(current.arg, currentMeta); } else { return currentMeta; } @@ -427,7 +436,7 @@ public final class NetconfMessageTransformUtil { rpcNS.setAttribute(XmlNetconfConstants.MESSAGE_ID, counter.getNewMessageId(MESSAGE_ID_PREFIX)); final Element actionNS = document.createElementNS(YangConstants.RFC6020_YANG_NAMESPACE_STRING, "action"); - final DataSchemaContextNode rootSchemaContextNode = dataSchemaContextTree.getRoot(); + final DataSchemaContext rootSchemaContextNode = dataSchemaContextTree.getRoot(); final Element actionData = prepareActionData(rootSchemaContextNode, actionNS, domDataTreeIdentifier.getRootIdentifier().getPathArguments().iterator(), document); @@ -439,15 +448,16 @@ public final class NetconfMessageTransformUtil { return new DOMResult(specificActionElement); } - private static Element prepareActionData(final DataSchemaContextNode currentParentSchemaNode, + private static Element prepareActionData(final DataSchemaContext currentParentSchemaNode, final Element actionNS, final Iterator iterator, final Document document) { if (iterator.hasNext()) { final PathArgument next = iterator.next(); - final DataSchemaContextNode current = currentParentSchemaNode.getChild(next); + final DataSchemaContext current = currentParentSchemaNode instanceof DataSchemaContext.Composite composite + ? composite.childByArg(next) : null; Preconditions.checkArgument(current != null, "Invalid input: schema for argument %s not found", next); - if (current.isMixin()) { + if (current instanceof PathMixin) { return prepareActionData(current, actionNS, iterator, document); } diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformer.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformer.java index d80b71cb43..95d05a6041 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformer.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformer.java @@ -61,7 +61,6 @@ import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.client.mdsal.api.ActionTransformer; import org.opendaylight.netconf.client.mdsal.api.NotificationTransformer; import org.opendaylight.netconf.client.mdsal.api.RpcTransformer; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -69,12 +68,13 @@ import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.ActionDefinition; import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer; @@ -140,7 +140,7 @@ public class NetconfMessageTransformer @VisibleForTesting static ImmutableMap getActions(final EffectiveModelContext schemaContext) { final var builder = ImmutableMap.builder(); - findAction(schemaContext, new ArrayDeque(), builder); + findAction(schemaContext, new ArrayDeque<>(), builder); return builder.build(); } @@ -199,7 +199,7 @@ public class NetconfMessageTransformer @GuardedBy("this") private ContainerNode toNotification(final Absolute notificationPath, final Element element) { - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); try { final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final XmlParserStream xmlParser = XmlParserStream.create(writer, mountContext, @@ -210,7 +210,7 @@ public class NetconfMessageTransformer | UnsupportedOperationException e) { throw new IllegalArgumentException(String.format("Failed to parse notification %s", element), e); } - return (ContainerNode) resultHolder.getResult(); + return (ContainerNode) resultHolder.getResult().data(); } private Optional findNestedNotification(final NetconfMessage message, @@ -476,7 +476,7 @@ public class NetconfMessageTransformer final var inference = SchemaInferenceStack.of(mountContext.getEffectiveModelContext(), outputPath) .toInference(); - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final Element element = message.getDocument().getDocumentElement(); try { final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); @@ -485,7 +485,7 @@ public class NetconfMessageTransformer } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) { throw new IllegalArgumentException(String.format("Failed to parse RPC response %s", element), e); } - return (ContainerNode) resultHolder.getResult(); + return (ContainerNode) resultHolder.getResult().data(); } @Beta diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfRpcStructureTransformer.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfRpcStructureTransformer.java index d488ef1ec9..8048f72226 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfRpcStructureTransformer.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfRpcStructureTransformer.java @@ -14,14 +14,14 @@ import java.util.Optional; import javax.xml.stream.XMLStreamException; import org.opendaylight.netconf.api.EffectiveOperation; import org.opendaylight.netconf.common.mdsal.NormalizedDataUtil; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; @@ -42,11 +42,11 @@ class NetconfRpcStructureTransformer implements RpcStructureTransformer { public Optional selectFromDataStructure(final DataContainerChild data, final YangInstanceIdentifier path) { if (data instanceof DOMSourceAnyxmlNode) { - final NormalizedNodeResult node; + final NormalizationResultHolder node; try { node = NormalizedDataUtil.transformDOMSourceToNormalizedNode(mountContext, ((DOMSourceAnyxmlNode)data).body()); - return NormalizedNodes.findNode(node.getResult(), path.getPathArguments()); + return NormalizedNodes.findNode(node.getResult().data(), path.getPathArguments()); } catch (final XMLStreamException | URISyntaxException | IOException | SAXException e) { LOG.error("Cannot parse anyxml.", e); return Optional.empty(); diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/AbstractNetconfDataTreeService.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/AbstractNetconfDataTreeService.java index 7a873c5c77..a41cfd7007 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/AbstractNetconfDataTreeService.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/AbstractNetconfDataTreeService.java @@ -30,11 +30,11 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.client.mdsal.impl.NetconfBaseOps; import org.opendaylight.netconf.client.mdsal.impl.NetconfRpcFutureCallback; import org.opendaylight.netconf.dom.api.NetconfDataTreeService; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBroker.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBroker.java index 87e1ab1f95..45a7662a6d 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBroker.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBroker.java @@ -26,7 +26,7 @@ import org.opendaylight.netconf.dom.api.tx.NetconfDOMDataBrokerFieldsExtension; import org.opendaylight.netconf.dom.api.tx.NetconfDOMFieldsReadTransaction; import org.opendaylight.netconf.dom.api.tx.NetconfDOMFieldsReadWriteTransaction; import org.opendaylight.netconf.dom.api.tx.NetconfDOMFieldsTransactionChain; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; public final class NetconfDeviceDataBroker implements PingPongMergingDOMDataBroker { private final NetconfDOMDataBrokerFieldsExtension fieldsExtension = new NetconfDOMDataBrokerFieldsExtensionImpl(); diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaYangSourceProviderTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaYangSourceProviderTest.java index d2d16b5690..77d889a68d 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaYangSourceProviderTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaYangSourceProviderTest.java @@ -15,7 +15,6 @@ import static org.junit.Assert.assertThrows; import java.net.InetSocketAddress; import java.net.MalformedURLException; import java.net.URL; -import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.concurrent.ExecutionException; import org.junit.Before; @@ -39,7 +38,7 @@ public class LibrarySchemaYangSourceProviderTest { @Test public void testGetSource() throws Exception { var source = yangLibrarySchemaYangSourceProvider.getSource(workingSid); - final String x = source.get().asCharSource(StandardCharsets.UTF_8).read(); + final String x = source.get().read(); assertThat(x, containsString("module config-test-rpc")); } diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfNestedNotificationTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfNestedNotificationTest.java index f6fe3d8be3..47926db7ed 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfNestedNotificationTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfNestedNotificationTest.java @@ -22,9 +22,9 @@ import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.messages.NotificationMessage; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformer; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; 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; @@ -45,12 +45,12 @@ public class NetconfNestedNotificationTest extends AbstractBaseSchemasTest { getNotificationSchemaContext(Collections.singleton("/schemas/nested-notification.yang")); final NetconfMessage notificationMessage = prepareNotification("/nested-notification-payload.xml"); NetconfMessageTransformer messageTransformer = new NetconfMessageTransformer( - new EmptyMountPointContext(schemaContext), true, BASE_SCHEMAS.getBaseSchema()); + MountPointContext.of(schemaContext), true, BASE_SCHEMAS.getBaseSchema()); final DOMNotification domNotification = messageTransformer.toNotification(notificationMessage); final ContainerNode root = domNotification.getBody(); assertNotNull(root); assertEquals(1, root.body().size()); - assertEquals("interface-enabled", root.getIdentifier().getNodeType().getLocalName()); + assertEquals("interface-enabled", root.name().getNodeType().getLocalName()); assertEquals(NotificationMessage.RFC3339_DATE_PARSER.apply("2008-07-08T00:01:00Z"), ((DOMEvent) domNotification).getEventInstant()); assertEquals(Absolute.of(INTERFACES_QNAME, INTERFACE_QNAME, INTERFACE_ENABLED_NOTIFICATION_QNAME), diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemasTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemasTest.java index fdbce052cc..09af1952b8 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemasTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemasTest.java @@ -56,7 +56,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; @@ -83,14 +83,14 @@ public class NetconfStateSchemasTest extends AbstractBaseSchemasTest { public void setUp() throws Exception { schemaContext = BASE_SCHEMAS.getBaseSchemaWithNotifications().getEffectiveModelContext(); - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.ofDataTreePath(schemaContext, NetconfState.QNAME, Schemas.QNAME).toInference(), false); xmlParser.parse(UntrustedXML.createXMLStreamReader(getClass().getResourceAsStream( "/netconf-state.schemas.payload.xml"))); - compositeNodeSchemas = (ContainerNode) resultHolder.getResult(); + compositeNodeSchemas = (ContainerNode) resultHolder.getResult().data(); } @Test diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToNotificationTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToNotificationTest.java index f20b5484ae..6d52e85b76 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToNotificationTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToNotificationTest.java @@ -22,8 +22,8 @@ import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.messages.NotificationMessage; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformer; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -65,7 +65,7 @@ public class NetconfToNotificationTest extends AbstractBaseSchemasTest { @Test public void testMostRecentWrongYangModel() throws Exception { final EffectiveModelContext schemaContext = getNotificationSchemaContext(getClass(), true); - messageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(schemaContext), true, + messageTransformer = new NetconfMessageTransformer(MountPointContext.of(schemaContext), true, BASE_SCHEMAS.getBaseSchema()); assertThrows(IllegalArgumentException.class, () -> messageTransformer.toNotification(userNotification)); } @@ -73,7 +73,7 @@ public class NetconfToNotificationTest extends AbstractBaseSchemasTest { @Test public void testToNotificationFunction() throws Exception { final EffectiveModelContext schemaContext = getNotificationSchemaContext(getClass(), false); - messageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(schemaContext), true, + messageTransformer = new NetconfMessageTransformer(MountPointContext.of(schemaContext), true, BASE_SCHEMAS.getBaseSchema()); final DOMNotification domNotification = messageTransformer.toNotification(userNotification); final ContainerNode root = domNotification.getBody(); diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToRpcRequestTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToRpcRequestTest.java index 5007457fa1..e94cd05281 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToRpcRequestTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToRpcRequestTest.java @@ -20,10 +20,10 @@ import org.junit.Test; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformer; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -60,7 +60,7 @@ public class NetconfToRpcRequestTest extends AbstractBaseSchemasTest { @Before public void before() { - messageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(cfgCtx), true, + messageTransformer = new NetconfMessageTransformer(MountPointContext.of(cfgCtx), true, BASE_SCHEMAS.getBaseSchema()); } diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOpsTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOpsTest.java index 563b613e90..ab862463ba 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOpsTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOpsTest.java @@ -39,7 +39,6 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceCommunicator; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.netconf.client.mdsal.spi.NetconfDeviceRpc; import org.opendaylight.netconf.common.mdsal.NormalizedDataUtil; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; @@ -47,6 +46,7 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -109,10 +109,10 @@ public class NetconfBaseOpsTest extends AbstractTestModelTest { when(listener.sendRequest(any(), eq(NetconfMessageTransformUtil.NETCONF_COMMIT_QNAME))) .thenReturn(RpcResultBuilder.success(ok).buildFuture()); final var rpc = new NetconfDeviceRpc(SCHEMA_CONTEXT, listener, new NetconfMessageTransformer( - new EmptyMountPointContext(SCHEMA_CONTEXT), true, BASE_SCHEMAS.getBaseSchema())); + MountPointContext.of(SCHEMA_CONTEXT), true, BASE_SCHEMAS.getBaseSchema())); callback = new NetconfRpcFutureCallback("prefix", new RemoteDeviceId("device-1", InetSocketAddress.createUnresolved("localhost", 17830))); - baseOps = new NetconfBaseOps(rpc, new EmptyMountPointContext(SCHEMA_CONTEXT)); + baseOps = new NetconfBaseOps(rpc, MountPointContext.of(SCHEMA_CONTEXT)); } @Test diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformerTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformerTest.java index 486d17f557..3017d5a17f 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformerTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformerTest.java @@ -69,11 +69,9 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.mon import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfigChange; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.Edit; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; @@ -84,11 +82,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -194,7 +192,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { XMLUnit.setIgnoreComments(true); netconfMessageTransformer = getTransformer(SCHEMA); - actionNetconfMessageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(ACTION_SCHEMA), + actionNetconfMessageTransformer = new NetconfMessageTransformer(MountPointContext.of(ACTION_SCHEMA), true, BASE_SCHEMAS.getBaseSchema()); } @@ -210,8 +208,8 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { @Test public void testCreateSubscriberNotificationSchemaNotPresent() throws Exception { - final NetconfMessageTransformer transformer = new NetconfMessageTransformer(new EmptyMountPointContext(SCHEMA), - true, BASE_SCHEMAS.getBaseSchemaWithNotifications()); + final NetconfMessageTransformer transformer = new NetconfMessageTransformer(MountPointContext.of(SCHEMA), true, + BASE_SCHEMAS.getBaseSchemaWithNotifications()); NetconfMessage netconfMessage = transformer.toRpcRequest(CREATE_SUBSCRIPTION_RPC_QNAME, CREATE_SUBSCRIPTION_RPC_CONTENT); String documentString = XmlUtil.toString(netconfMessage.getDocument()); @@ -334,8 +332,8 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { final DOMSourceAnyxmlNode data = (DOMSourceAnyxmlNode) compositeNodeRpcResult.value() .findChildByArg(toId(NETCONF_DATA_QNAME)).orElseThrow(); - NormalizedNodeResult nodeResult = NormalizedDataUtil.transformDOMSourceToNormalizedNode(SCHEMA, data.body()); - ContainerNode result = (ContainerNode) nodeResult.getResult(); + var nodeResult = NormalizedDataUtil.transformDOMSourceToNormalizedNode(SCHEMA, data.body()); + ContainerNode result = (ContainerNode) nodeResult.getResult().data(); final ContainerNode state = (ContainerNode) result.getChildByArg(toId(NetconfState.QNAME)); final ContainerNode schemas = (ContainerNode) state.getChildByArg(toId(Schemas.QNAME)); final MapNode schemaParent = (MapNode) schemas.getChildByArg(toId(Schema.QNAME)); @@ -524,7 +522,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { } private static NetconfMessageTransformer getTransformer(final EffectiveModelContext schema) { - return new NetconfMessageTransformer(new EmptyMountPointContext(schema), true, BASE_SCHEMAS.getBaseSchema()); + return new NetconfMessageTransformer(MountPointContext.of(schema), true, BASE_SCHEMAS.getBaseSchema()); } @Test @@ -672,7 +670,6 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { List nodeIdentifiers = new ArrayList<>(); nodeIdentifiers.add(NodeIdentifier.create(SERVER_QNAME)); nodeIdentifiers.add(NodeIdentifierWithPredicates.of(SERVER_QNAME, serverNameQname, "testServer")); - nodeIdentifiers.add(new AugmentationIdentifier(Set.of(APPLICATIONS_QNAME))); nodeIdentifiers.add(NodeIdentifier.create(APPLICATIONS_QNAME)); nodeIdentifiers.add(NodeIdentifier.create(APPLICATION_QNAME)); nodeIdentifiers.add(NodeIdentifierWithPredicates.of(APPLICATION_QNAME, diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/FieldsAwareReadOnlyTxTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/FieldsAwareReadOnlyTxTest.java index 6a9088ca70..0d9b8814f0 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/FieldsAwareReadOnlyTxTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/FieldsAwareReadOnlyTxTest.java @@ -27,9 +27,9 @@ import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.client.mdsal.impl.NetconfBaseOps; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class FieldsAwareReadOnlyTxTest { @@ -46,11 +46,11 @@ public class FieldsAwareReadOnlyTxTest { try (var readOnlyTx = new FieldsAwareReadOnlyTx(netconfOps, new RemoteDeviceId("a", new InetSocketAddress("localhost", 196)))) { - readOnlyTx.read(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.empty(), - List.of(YangInstanceIdentifier.empty())); + readOnlyTx.read(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.of(), + List.of(YangInstanceIdentifier.of())); verify(rpc).invokeNetconf(eq(NETCONF_GET_CONFIG_QNAME), any()); - readOnlyTx.read(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.empty()); + readOnlyTx.read(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of()); verify(rpc).invokeNetconf(eq(NETCONF_GET_QNAME), any()); } } diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDataTreeServiceImplTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDataTreeServiceImplTest.java index 4eb1bc6a89..b61d9fa331 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDataTreeServiceImplTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDataTreeServiceImplTest.java @@ -44,8 +44,8 @@ import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformer; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.IetfNetconfService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class NetconfDataTreeServiceImplTest extends AbstractTestModelTest { @@ -62,7 +62,7 @@ public class NetconfDataTreeServiceImplTest extends AbstractTestModelTest { doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(rpcService).invokeNetconf(any(), any()); netconService = getNetconService(); final var model = BindingRuntimeHelpers.createEffectiveModel(IetfNetconfService.class, NetconfState.class); - netconfMessageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(model), true, + netconfMessageTransformer = new NetconfMessageTransformer(MountPointContext.of(model), true, BASE_SCHEMAS.getBaseSchema()); } @@ -161,7 +161,7 @@ public class NetconfDataTreeServiceImplTest extends AbstractTestModelTest { NetconfSessionPreferences prefs = NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE)); final RemoteDeviceId id = new RemoteDeviceId("device-1", InetSocketAddress.createUnresolved("localhost", 17830)); - return AbstractNetconfDataTreeService.of(id, new EmptyMountPointContext(SCHEMA_CONTEXT), rpcService, prefs, + return AbstractNetconfDataTreeService.of(id, MountPointContext.of(SCHEMA_CONTEXT), rpcService, prefs, true); } } diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBrokerTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBrokerTest.java index 453d5cda8b..5802fe7824 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBrokerTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBrokerTest.java @@ -41,8 +41,8 @@ import org.opendaylight.netconf.dom.api.tx.NetconfDOMFieldsReadTransaction; import org.opendaylight.netconf.dom.api.tx.NetconfDOMFieldsReadWriteTransaction; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.IetfNetconfService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.monitoring.rev220718.NetconfTcp; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @RunWith(MockitoJUnitRunner.class) @@ -127,6 +127,6 @@ public class NetconfDeviceDataBrokerTest { NetconfSessionPreferences prefs = NetconfSessionPreferences.fromStrings(List.of(caps)); final RemoteDeviceId id = new RemoteDeviceId("device-1", InetSocketAddress.createUnresolved("localhost", 17830)); - return new NetconfDeviceDataBroker(id, new EmptyMountPointContext(SCHEMA_CONTEXT), rpcService, prefs, true); + return new NetconfDeviceDataBroker(id, MountPointContext.of(SCHEMA_CONTEXT), rpcService, prefs, true); } } diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceRpcTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceRpcTest.java index bb33c94810..7fbd3e0128 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceRpcTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceRpcTest.java @@ -40,7 +40,6 @@ import org.opendaylight.netconf.client.mdsal.api.RpcTransformer; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformer; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.IetfNetconfService; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -48,6 +47,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; @@ -79,7 +79,7 @@ public class NetconfDeviceRpcTest extends AbstractBaseSchemasTest { @Before public void setUp() throws Exception { NetconfMessageTransformer transformer = new NetconfMessageTransformer( - new EmptyMountPointContext(SCHEMA_CONTEXT), true, BASE_SCHEMAS.getBaseSchema()); + MountPointContext.of(SCHEMA_CONTEXT), true, BASE_SCHEMAS.getBaseSchema()); final NetconfMessage reply = new NetconfMessage(XmlUtil.readXmlToDocument( "\n" + "\n" diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceSalFacadeTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceSalFacadeTest.java index be94009d25..b5e050f9bc 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceSalFacadeTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceSalFacadeTest.java @@ -31,7 +31,7 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.dom.api.NetconfDataTreeService; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -78,7 +78,7 @@ public class NetconfDeviceSalFacadeTest { final var netconfSessionPreferences = NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE)); final var deviceServices = new RemoteDeviceServices(mock(Rpcs.Normalized.class), null); deviceFacade.onDeviceConnected( - new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), new EmptyMountPointContext(schemaContext)), + new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), MountPointContext.of(schemaContext)), netconfSessionPreferences, deviceServices); verify(mountInstance, times(1)).onDeviceConnected(eq(schemaContext), eq(deviceServices), diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceWriteOnlyTxTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceWriteOnlyTxTest.java index db0e11bd74..8a23461c50 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceWriteOnlyTxTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceWriteOnlyTxTest.java @@ -41,7 +41,6 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.client.mdsal.impl.NetconfBaseOps; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.common.ErrorTag; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -49,6 +48,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; @RunWith(MockitoJUnitRunner.StrictStubs.class) diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/ReadOnlyTxTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/ReadOnlyTxTest.java index 81fe9de292..80f92e527e 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/ReadOnlyTxTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/ReadOnlyTxTest.java @@ -27,9 +27,9 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.client.mdsal.impl.NetconfBaseOps; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class ReadOnlyTxTest { diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateRunningTxTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateRunningTxTest.java index f1eb5ff1c1..d3be06e948 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateRunningTxTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateRunningTxTest.java @@ -32,11 +32,11 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.client.mdsal.impl.NetconfBaseOps; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.copy.config.input.target.ConfigTarget; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; @@ -50,7 +50,7 @@ public class WriteCandidateRunningTxTest extends AbstractTestModelTest { @Before public void setUp() { doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(rpc).invokeNetconf(any(), any()); - netconfOps = new NetconfBaseOps(rpc, new EmptyMountPointContext(SCHEMA_CONTEXT)); + netconfOps = new NetconfBaseOps(rpc, MountPointContext.of(SCHEMA_CONTEXT)); id = new RemoteDeviceId("device1", InetSocketAddress.createUnresolved("0.0.0.0", 17830)); } diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateTxTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateTxTest.java index 50b72bb728..71fadb8d22 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateTxTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateTxTest.java @@ -27,7 +27,7 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.client.mdsal.impl.NetconfBaseOps; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class WriteCandidateTxTest extends AbstractTestModelTest { @@ -41,7 +41,7 @@ public class WriteCandidateTxTest extends AbstractTestModelTest { @Before public void setUp() { doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(rpc).invokeNetconf(any(), any()); - netconfOps = new NetconfBaseOps(rpc, new EmptyMountPointContext(SCHEMA_CONTEXT)); + netconfOps = new NetconfBaseOps(rpc, MountPointContext.of(SCHEMA_CONTEXT)); } @Test diff --git a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteRunningTxTest.java b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteRunningTxTest.java index ff7102856a..160dd09579 100644 --- a/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteRunningTxTest.java +++ b/plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteRunningTxTest.java @@ -28,7 +28,7 @@ import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs; import org.opendaylight.netconf.client.mdsal.impl.NetconfBaseOps; import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class WriteRunningTxTest extends AbstractTestModelTest { @@ -42,7 +42,7 @@ public class WriteRunningTxTest extends AbstractTestModelTest { @Before public void setUp() { doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(rpc).invokeNetconf(any(), any()); - netconfOps = new NetconfBaseOps(rpc, new EmptyMountPointContext(SCHEMA_CONTEXT)); + netconfOps = new NetconfBaseOps(rpc, MountPointContext.of(SCHEMA_CONTEXT)); } @Test diff --git a/plugins/netconf-common-mdsal/pom.xml b/plugins/netconf-common-mdsal/pom.xml index fb3225216f..04540bbb6f 100644 --- a/plugins/netconf-common-mdsal/pom.xml +++ b/plugins/netconf-common-mdsal/pom.xml @@ -42,22 +42,6 @@ org.opendaylight.yangtools yang-data-util - - org.opendaylight.yangtools - rfc7952-data-api - - - org.opendaylight.yangtools - rfc7952-data-util - - - org.opendaylight.yangtools - rfc8528-data-api - - - org.opendaylight.yangtools - rfc8528-data-util - org.opendaylight.yangtools yang-data-impl diff --git a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/EmptyListXmlMetadataWriter.java b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/EmptyListXmlMetadataWriter.java index 5caf707ac3..04179ada81 100644 --- a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/EmptyListXmlMetadataWriter.java +++ b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/EmptyListXmlMetadataWriter.java @@ -16,13 +16,11 @@ import java.util.Deque; import java.util.Map; import javax.xml.stream.XMLStreamWriter; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata; -import org.opendaylight.yangtools.rfc7952.data.api.StreamWriterMetadataExtension; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedMetadata; import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; @@ -34,13 +32,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre final class EmptyListXmlMetadataWriter extends ForwardingNormalizedNodeStreamWriter { private final Deque stack = new ArrayDeque<>(); private final EmptyListXmlWriter dataWriterDelegate; - private final StreamWriterMetadataExtension metaWriter; + private final MetadataExtension metaWriter; private final NormalizedMetadata metadata; private int absentDepth = 0; EmptyListXmlMetadataWriter(final @NonNull NormalizedNodeStreamWriter writer, - final @NonNull XMLStreamWriter xmlStreamWriter, final @NonNull StreamWriterMetadataExtension metaWriter, + final @NonNull XMLStreamWriter xmlStreamWriter, final @NonNull MetadataExtension metaWriter, final @NonNull NormalizedMetadata metadata) { dataWriterDelegate = new EmptyListXmlWriter(requireNonNull(writer), requireNonNull(xmlStreamWriter)); this.metaWriter = requireNonNull(metaWriter); @@ -119,12 +117,6 @@ final class EmptyListXmlMetadataWriter extends ForwardingNormalizedNodeStreamWri enterMetadataNode(name); } - @Override - public void startAugmentationNode(final AugmentationIdentifier identifier) throws IOException { - dataWriterDelegate.startAugmentationNode(identifier); - enterMetadataNode(identifier); - } - @Override public boolean startAnyxmlNode(final NodeIdentifier name, final Class objectModel) throws IOException { final boolean ret = dataWriterDelegate.startAnyxmlNode(name, objectModel); diff --git a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/NormalizedDataUtil.java b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/NormalizedDataUtil.java index d302a93ec0..56d8b24ff1 100644 --- a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/NormalizedDataUtil.java +++ b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/NormalizedDataUtil.java @@ -21,24 +21,23 @@ import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.netconf.api.xml.XmlUtil; -import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata; -import org.opendaylight.yangtools.rfc7952.data.api.StreamWriterMetadataExtension; -import org.opendaylight.yangtools.rfc7952.data.util.NormalizedMetadataWriter; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedMetadata; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedMetadataWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter.MetadataExtension; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; @@ -216,7 +215,7 @@ public final class NormalizedDataUtil { XML_NAMESPACE_SETTER.initializeNamespace(xmlWriter); try (var streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, path); var writer = new EmptyListXmlMetadataWriter(streamWriter, xmlWriter, - streamWriter.getExtensions().getInstance(StreamWriterMetadataExtension.class), metadata)) { + streamWriter.extension(MetadataExtension.class), metadata)) { final Iterator it = query.getPathArguments().iterator(); final PathArgument first = it.next(); StreamingContext.fromSchemaAndQNameChecked(context, first.getNodeType()).streamToWriter(writer, first, it); @@ -383,9 +382,9 @@ public final class NormalizedDataUtil { return rootTreeNode; } - public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final MountPointContext mount, + public static NormalizationResultHolder transformDOMSourceToNormalizedNode(final MountPointContext mount, final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException { - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); try (XmlParserStream xmlParserStream = XmlParserStream.create(writer, new ProxyMountPointContext(mount))) { xmlParserStream.traverse(value); @@ -394,8 +393,9 @@ public final class NormalizedDataUtil { } // FIXME: document this interface contract. Does it support RFC8528/RFC8542? How? - public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final EffectiveModelContext schemaContext, - final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException { - return transformDOMSourceToNormalizedNode(new EmptyMountPointContext(schemaContext), value); + public static NormalizationResultHolder transformDOMSourceToNormalizedNode( + final EffectiveModelContext schemaContext, final DOMSource value) + throws XMLStreamException, URISyntaxException, IOException, SAXException { + return transformDOMSourceToNormalizedNode(MountPointContext.of(schemaContext), value); } } diff --git a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/ProxyMountPointContext.java b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/ProxyMountPointContext.java index b67d7ac572..e41231ba77 100644 --- a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/ProxyMountPointContext.java +++ b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/ProxyMountPointContext.java @@ -12,9 +12,9 @@ import static java.util.Objects.requireNonNull; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Delegator; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; +import org.opendaylight.yangtools.yang.common.MountPointLabel; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; /** @@ -38,7 +38,7 @@ final class ProxyMountPointContext implements Delegator, Moun } @Override - public Optional findMountPoint(final MountPointIdentifier label) { + public Optional findMountPoint(final MountPointLabel label) { return delegate.findMountPoint(label); } } diff --git a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/StreamingContext.java b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/StreamingContext.java index 8b6889a824..050b967a3d 100644 --- a/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/StreamingContext.java +++ b/plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/StreamingContext.java @@ -25,17 +25,13 @@ import javax.xml.transform.dom.DOMSource; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; -import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; -import org.opendaylight.yangtools.yang.model.api.AugmentationTarget; import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; @@ -44,7 +40,6 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -import org.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema; abstract class StreamingContext implements Identifiable { private final T identifier; @@ -58,17 +53,7 @@ abstract class StreamingContext implements Identifiable< checkArgument(potential.isPresent(), "Supplied QName %s is not valid according to schema %s, potential children nodes: %s", child, schema, schema.getChildNodes()); - - final DataSchemaNode result = potential.orElseThrow(); - // We try to look up if this node was added by augmentation - if (schema instanceof DataSchemaNode && result.isAugmenting()) { - for (final AugmentationSchemaNode aug : ((AugmentationTarget)schema).getAvailableAugmentations()) { - if (aug.dataChildByName(result.getQName()) != null) { - return new Augmentation(aug, schema); - } - } - } - return fromDataSchemaNode(result); + return fromDataSchemaNode(potential.orElseThrow()); } static StreamingContext fromDataSchemaNode(final DataSchemaNode potential) { @@ -236,9 +221,6 @@ abstract class StreamingContext implements Identifiable< } private StreamingContext fromLocalSchema(final PathArgument child) { - if (child instanceof AugmentationIdentifier aid) { - return fromSchemaAndQNameChecked(schema, aid.getPossibleChildNames().iterator().next()); - } return fromSchemaAndQNameChecked(schema, child.getNodeType()); } } @@ -486,24 +468,6 @@ abstract class StreamingContext implements Identifiable< } } - private static final class Augmentation extends AbstractDataContainer { - Augmentation(final AugmentationSchemaNode augmentation, final DataNodeContainer schema) { - super(DataSchemaContextNode.augmentationIdentifierFrom(augmentation), - new EffectiveAugmentationSchema(augmentation, schema)); - } - - @Override - boolean isMixin() { - return true; - } - - @Override - void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg, - final int childSizeHint) throws IOException { - writer.startAugmentationNode(getIdentifier()); - } - } - private static final class UnorderedMapMixin extends AbstractMapMixin { UnorderedMapMixin(final ListSchemaNode list) { super(list); diff --git a/plugins/netconf-dom-api/pom.xml b/plugins/netconf-dom-api/pom.xml index 26a619efac..6e651c031c 100644 --- a/plugins/netconf-dom-api/pom.xml +++ b/plugins/netconf-dom-api/pom.xml @@ -22,6 +22,11 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + com.google.guava guava diff --git a/plugins/netconf-server-mdsal/pom.xml b/plugins/netconf-server-mdsal/pom.xml index 746f970517..7784004be2 100644 --- a/plugins/netconf-server-mdsal/pom.xml +++ b/plugins/netconf-server-mdsal/pom.xml @@ -33,10 +33,6 @@ org.opendaylight.yangtools yang-common - - org.opendaylight.yangtools - rfc7952-data-api - org.opendaylight.yangtools yang-data-api diff --git a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/MdsalNetconfOperationServiceFactory.java b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/MdsalNetconfOperationServiceFactory.java index dba9d8a1e1..3649430d24 100644 --- a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/MdsalNetconfOperationServiceFactory.java +++ b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/MdsalNetconfOperationServiceFactory.java @@ -9,11 +9,7 @@ package org.opendaylight.netconf.server.mdsal; import static java.util.Objects.requireNonNull; -import com.google.common.io.CharStreams; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Optional; import java.util.Set; @@ -118,24 +114,14 @@ public final class MdsalNetconfOperationServiceFactory implements NetconfOperati final String revision = module.getRevision().map(Revision::toString).orElse(null); final SourceIdentifier moduleSourceIdentifier = new SourceIdentifier(moduleName, revision); - InputStream sourceStream = null; String source; try { - sourceStream = rootSchemaSourceProviderDependency.getSource(moduleSourceIdentifier).get().openStream(); - source = CharStreams.toString(new InputStreamReader(sourceStream, StandardCharsets.UTF_8)); + source = rootSchemaSourceProviderDependency.getSource(moduleSourceIdentifier).get().read(); } catch (ExecutionException | InterruptedException | IOException e) { LOG.warn("Ignoring source for module {}. Unable to read content", moduleSourceIdentifier, e); source = null; } - try { - if (sourceStream != null) { - sourceStream.close(); - } - } catch (IOException e) { - LOG.warn("Error closing yang source stream {}. Ignoring", moduleSourceIdentifier, e); - } - if (source != null) { return Optional.of(new YangModuleCapability(moduleNamespace, moduleName, revision, source)); } diff --git a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/ComponentNormalizedNodeStreamWriter.java b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/ComponentNormalizedNodeStreamWriter.java index 67eb5f7a4f..749f710b73 100644 --- a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/ComponentNormalizedNodeStreamWriter.java +++ b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/ComponentNormalizedNodeStreamWriter.java @@ -9,7 +9,7 @@ package org.opendaylight.netconf.server.mdsal.operations; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableMetadataNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeMetadataResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; /** * This is a single component writer, which results in some amount. @@ -19,7 +19,7 @@ final class ComponentNormalizedNodeStreamWriter extends ImmutableMetadataNormali super(state); } - ComponentNormalizedNodeStreamWriter(final NormalizedNodeMetadataResult result) { + ComponentNormalizedNodeStreamWriter(final NormalizationResultHolder result) { super(result); } diff --git a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/CopyConfig.java b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/CopyConfig.java index c1aeaad34b..b56535e6d9 100644 --- a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/CopyConfig.java +++ b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/CopyConfig.java @@ -43,7 +43,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWrit import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -102,10 +102,10 @@ public final class CopyConfig extends AbstractEdit { // Then create nodes present in the element: for (final XmlElement element : configElements) { - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); parseIntoNormalizedNode(getSchemaNodeFromNamespace(element.getNamespace(), element), element, ImmutableNormalizedNodeStreamWriter.from(resultHolder)); - final NormalizedNode data = resultHolder.getResult(); + final NormalizedNode data = resultHolder.getResult().data(); final YangInstanceIdentifier path = YangInstanceIdentifier.create(data.getIdentifier()); // Doing merge instead of put to support top-level list: rwTx.merge(LogicalDatastoreType.CONFIGURATION, path, data); diff --git a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/EditConfig.java b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/EditConfig.java index 71912537e0..8873593276 100644 --- a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/EditConfig.java +++ b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/EditConfig.java @@ -25,7 +25,6 @@ import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.ErrorTag; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -138,7 +137,7 @@ public final class EditConfig extends AbstractEdit { final var dataSchemaNode = DataSchemaContextTree.from(schemaContext.getCurrentContext()) .findChild(parentNodeYid) .orElseThrow(() -> new IllegalStateException("Cannot find schema for " + parentNodeYid)) - .getDataSchemaNode(); + .dataSchemaNode(); // we should have the schema node that points to the parent list now, enforce it if (!(dataSchemaNode instanceof ListSchemaNode listSchemaNode)) { @@ -150,11 +149,6 @@ public final class EditConfig extends AbstractEdit { (listSchemaNode.isUserOrdered() ? Builders.orderedMapBuilder() : Builders.mapBuilder()) .withNodeIdentifier(new NodeIdentifier(parentNodeYid.getLastPathArgument().getNodeType())) .build()); - } else if (parentNodeYid.getLastPathArgument() instanceof AugmentationIdentifier augId) { - // merge empty augmentation node - rwtx.merge(LogicalDatastoreType.CONFIGURATION, parentNodeYid, Builders.augmentationBuilder() - .withNodeIdentifier(augId) - .build()); } } diff --git a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java index e4dc200712..0cfcc55b95 100644 --- a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java +++ b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java @@ -41,7 +41,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.data.impl.schema.SchemaOrderedNormalizedNodeWriter; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; @@ -247,7 +247,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { */ private @Nullable ContainerNode rpcToNNode(final XmlElement element, final RpcDefinition rpcDefinition) throws DocumentedException { - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.of( schemaContext.getCurrentContext(), @@ -260,6 +260,6 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE, ErrorSeverity.ERROR); } - return (ContainerNode) resultHolder.getResult(); + return (ContainerNode) resultHolder.getResult().data(); } } diff --git a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/SplittingNormalizedNodeMetadataStreamWriter.java b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/SplittingNormalizedNodeMetadataStreamWriter.java index 14c0129dc6..3351b3ea7b 100644 --- a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/SplittingNormalizedNodeMetadataStreamWriter.java +++ b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/SplittingNormalizedNodeMetadataStreamWriter.java @@ -10,13 +10,12 @@ package org.opendaylight.netconf.server.mdsal.operations; import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; -import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import java.io.IOException; import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Collection; import java.util.Deque; import java.util.List; import javax.xml.transform.dom.DOMSource; @@ -24,28 +23,25 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.netconf.api.EffectiveOperation; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.EditConfigInput; -import org.opendaylight.yangtools.rfc7952.data.api.StreamWriterMetadataExtension; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension; +import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter.MetadataExtension; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeMetadataResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class SplittingNormalizedNodeMetadataStreamWriter implements NormalizedNodeStreamWriter, - StreamWriterMetadataExtension { +final class SplittingNormalizedNodeMetadataStreamWriter implements NormalizedNodeStreamWriter, MetadataExtension { private static final Logger LOG = LoggerFactory.getLogger(SplittingNormalizedNodeMetadataStreamWriter.class); private static final QName OPERATION_ATTRIBUTE = QName.create(EditConfigInput.QNAME.getNamespace(), XmlNetconfConstants.OPERATION_ATTR_KEY); // Top-level result node - private final NormalizedNodeMetadataResult result = new NormalizedNodeMetadataResult(); + private final NormalizationResultHolder result = new NormalizationResultHolder(); // Split-out changes private final List dataTreeChanges = new ArrayList<>(); // Path of the node we are currently in @@ -73,8 +69,8 @@ final class SplittingNormalizedNodeMetadataStreamWriter implements NormalizedNod } @Override - public ClassToInstanceMap getExtensions() { - return ImmutableClassToInstanceMap.of(StreamWriterMetadataExtension.class, this); + public Collection supportedExtensions() { + return List.of(this); } @Override @@ -161,13 +157,6 @@ final class SplittingNormalizedNodeMetadataStreamWriter implements NormalizedNod pushPath(name); } - @Override - public void startAugmentationNode(final AugmentationIdentifier identifier) throws IOException { - writer.startAugmentationNode(identifier); - pushPath(identifier); - } - - @Override public boolean startAnydataNode(final NodeIdentifier name, final Class objectModel) throws IOException { // FIXME: add anydata support @@ -199,7 +188,7 @@ final class SplittingNormalizedNodeMetadataStreamWriter implements NormalizedNod // All done, special-cased LOG.debug("All done ... writer {}", writer); writer.endNode(); - dataTreeChanges.add(new DataTreeChange(result.getResult(), currentAction, currentPath)); + dataTreeChanges.add(new DataTreeChange(result.getResult().data(), currentAction, currentPath)); } } diff --git a/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/AbstractNetconfOperationTest.java b/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/AbstractNetconfOperationTest.java index f9898c5adc..44a96cf8f7 100644 --- a/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/AbstractNetconfOperationTest.java +++ b/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/AbstractNetconfOperationTest.java @@ -13,7 +13,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangResources; -import com.google.common.io.ByteSource; +import com.google.common.io.CharSource; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import java.io.IOException; @@ -91,13 +91,11 @@ public abstract class AbstractNetconfOperationTest { final DOMStore operStore = InMemoryDOMDataStoreFactory.create("DOM-OPER", schemaService); final DOMStore configStore = InMemoryDOMDataStoreFactory.create("DOM-CFG", schemaService); - currentSchemaContext = CurrentSchemaContext.create(schemaService, sourceIdentifier -> { - final YangTextSchemaSource yangTextSchemaSource = - YangTextSchemaSource.delegateForByteSource(sourceIdentifier, ByteSource.wrap("module test".getBytes())); - return Futures.immediateFuture(yangTextSchemaSource); - }); + currentSchemaContext = CurrentSchemaContext.create(schemaService, + sourceIdentifier -> Futures.immediateFuture(YangTextSchemaSource.delegateForCharSource(sourceIdentifier, + CharSource.wrap("module test")))); - final EnumMap datastores = new EnumMap<>(LogicalDatastoreType.class); + final var datastores = new EnumMap(LogicalDatastoreType.class); datastores.put(LogicalDatastoreType.CONFIGURATION, configStore); datastores.put(LogicalDatastoreType.OPERATIONAL, operStore); diff --git a/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpcTest.java b/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpcTest.java index 6bbbad1c81..5adb7198f4 100644 --- a/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpcTest.java +++ b/plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpcTest.java @@ -15,7 +15,7 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import com.google.common.base.Preconditions; -import com.google.common.io.ByteSource; +import com.google.common.io.CharSource; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; @@ -170,12 +170,9 @@ public class RuntimeRpcTest { XMLUnit.setIgnoreWhitespace(true); XMLUnit.setIgnoreAttributeOrder(true); - doAnswer(invocationOnMock -> { - final SourceIdentifier sId = (SourceIdentifier) invocationOnMock.getArguments()[0]; - final YangTextSchemaSource yangTextSchemaSource = - YangTextSchemaSource.delegateForByteSource(sId, ByteSource.wrap("module test".getBytes())); - return Futures.immediateFuture(yangTextSchemaSource); - }).when(sourceProvider).getSource(any(SourceIdentifier.class)); + doAnswer(invocationOnMock -> Futures.immediateFuture(YangTextSchemaSource.delegateForCharSource( + (SourceIdentifier) invocationOnMock.getArguments()[0], CharSource.wrap("module test")))) + .when(sourceProvider).getSource(any(SourceIdentifier.class)); currentSchemaContext = CurrentSchemaContext.create(schemaService, sourceProvider); } diff --git a/plugins/pom.xml b/plugins/pom.xml index 4eaf5d2bab..c0df66ca05 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/pom.xml b/pom.xml index 6d310206cc..50727196f6 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/protocol/netconf-api/pom.xml b/protocol/netconf-api/pom.xml index 9218998fd7..b4e4138f18 100644 --- a/protocol/netconf-api/pom.xml +++ b/protocol/netconf-api/pom.xml @@ -21,6 +21,11 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + com.google.guava guava diff --git a/protocol/netconf-client/pom.xml b/protocol/netconf-client/pom.xml index 05767ea1be..b2fbfc64e7 100644 --- a/protocol/netconf-client/pom.xml +++ b/protocol/netconf-client/pom.xml @@ -21,6 +21,11 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + com.google.guava guava diff --git a/protocol/netconf-test-util/pom.xml b/protocol/netconf-test-util/pom.xml index 355fefae96..5a1e05bf38 100644 --- a/protocol/netconf-test-util/pom.xml +++ b/protocol/netconf-test-util/pom.xml @@ -20,6 +20,11 @@ ${project.artifactId} + + com.github.spotbugs + spotbugs-annotations + true + org.opendaylight.netconf netconf-api diff --git a/protocol/pom.xml b/protocol/pom.xml index df3f466497..37e26232d5 100644 --- a/protocol/pom.xml +++ b/protocol/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/restconf/pom.xml b/restconf/pom.xml index d20662ca8b..fd52610130 100644 --- a/restconf/pom.xml +++ b/restconf/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java index 81577a0caa..2d0fbbe896 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java @@ -41,7 +41,7 @@ public abstract class InstanceIdentifierContext { @Override public YangInstanceIdentifier getInstanceIdentifier() { - return YangInstanceIdentifier.empty(); + return YangInstanceIdentifier.of(); } @Override @@ -52,7 +52,7 @@ public abstract class InstanceIdentifierContext { @Override InstanceIdentifierContext createWithConcapt(final List concatArgs) { return new DataPath(context, getMountPoint(), SchemaInferenceStack.of(context), - YangInstanceIdentifier.create(concatArgs)); + YangInstanceIdentifier.of(concatArgs)); } } @@ -70,7 +70,7 @@ public abstract class InstanceIdentifierContext { static @NonNull DataPath of(final EffectiveModelContext context, final YangInstanceIdentifier path, final DOMMountPoint mountPoint) { final var nodeAndStack = DataSchemaContextTree.from(context).enterPath(path).orElseThrow(); - return new DataPath(nodeAndStack.node().getDataSchemaNode(), mountPoint, nodeAndStack.stack(), path); + return new DataPath(nodeAndStack.node().dataSchemaNode(), mountPoint, nodeAndStack.stack(), path); } @Override @@ -86,7 +86,7 @@ public abstract class InstanceIdentifierContext { @Override @NonNull InstanceIdentifierContext createWithConcapt(final List concatArgs) { - final var newInstanceIdentifier = YangInstanceIdentifier.create( + final var newInstanceIdentifier = YangInstanceIdentifier.of( Iterables.concat(path.getPathArguments(), concatArgs)); return new DataPath(getSchemaNode(), getMountPoint(), stack, newInstanceIdentifier); } diff --git a/restconf/restconf-nb/pom.xml b/restconf/restconf-nb/pom.xml index 0ada87728b..7992772558 100644 --- a/restconf/restconf-nb/pom.xml +++ b/restconf/restconf-nb/pom.xml @@ -21,6 +21,11 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + com.google.code.gson gson @@ -120,14 +125,6 @@ org.opendaylight.yangtools yang-data-impl - - org.opendaylight.yangtools - rfc8528-data-api - - - org.opendaylight.yangtools - rfc8528-data-util - org.opendaylight.yangtools yang-model-api diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/databind/DatabindContext.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/databind/DatabindContext.java index 6ed4fcc5d9..8faf5f09d7 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/databind/DatabindContext.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/databind/DatabindContext.java @@ -10,8 +10,7 @@ package org.opendaylight.restconf.nb.rfc8040.databind; import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory; @@ -31,7 +30,7 @@ public record DatabindContext( } public static @NonNull DatabindContext ofModel(final EffectiveModelContext modelContext) { - return ofMountPoint(new EmptyMountPointContext(modelContext)); + return ofMountPoint(MountPointContext.of(modelContext)); } public static @NonNull DatabindContext ofMountPoint(final MountPointContext mountContext) { diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java index 66962650a5..c443fda249 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java @@ -29,9 +29,7 @@ import org.opendaylight.yangtools.yang.common.ErrorTag; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -39,7 +37,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference; @@ -70,7 +68,7 @@ public class JsonNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyRead public static NormalizedNodePayload readFrom( final InstanceIdentifierContext path, final InputStream entityStream, final boolean isPost) { - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final Inference parentSchema; @@ -90,11 +88,11 @@ public class JsonNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyRead final JsonReader reader = new JsonReader(new InputStreamReader(entityStream, StandardCharsets.UTF_8)); jsonParser.parse(reader); - NormalizedNode result = resultHolder.getResult(); + NormalizedNode result = resultHolder.getResult().data(); final List iiToDataList = new ArrayList<>(); - while (result instanceof AugmentationNode || result instanceof ChoiceNode) { - final var childNode = ((DataContainerNode) result).body().iterator().next(); + while (result instanceof ChoiceNode choice) { + final var childNode = choice.body().iterator().next(); if (isPost) { iiToDataList.add(result.getIdentifier()); } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java index 36c9daa12a..62b65c4743 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java @@ -23,7 +23,6 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode; import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -188,14 +187,9 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod return true; } - // always write augmentation nodes - if (node instanceof AugmentationNode) { - return true; - } - // write only selected nodes if (currentDepth > 0 && currentDepth <= fields.size()) { - return fields.get(currentDepth - 1).contains(node.getIdentifier().getNodeType()); + return fields.get(currentDepth - 1).contains(node.name().getNodeType()); } // after this depth only depth parameter is used to determine when to write node @@ -250,8 +244,8 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod private boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { boolean processedAsCompositeNode = false; if (node instanceof ContainerNode n) { - if (!n.getIdentifier().getNodeType().withoutRevision().equals(ROOT_DATA_QNAME)) { - writer.startContainerNode(n.getIdentifier(), n.size()); + if (!n.name().getNodeType().withoutRevision().equals(ROOT_DATA_QNAME)) { + writer.startContainerNode(n.name(), n.size()); currentDepth++; processedAsCompositeNode = writeChildren(n.body(), false); currentDepth--; @@ -269,30 +263,27 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod } else if (node instanceof MapEntryNode n) { processedAsCompositeNode = writeMapEntryNode(n); } else if (node instanceof UnkeyedListEntryNode n) { - writer.startUnkeyedListItem(n.getIdentifier(), n.size()); + writer.startUnkeyedListItem(n.name(), n.size()); currentDepth++; processedAsCompositeNode = writeChildren(n.body(), false); currentDepth--; } else if (node instanceof ChoiceNode n) { - writer.startChoiceNode(n.getIdentifier(), n.size()); - processedAsCompositeNode = writeChildren(n.body(), true); - } else if (node instanceof AugmentationNode n) { - writer.startAugmentationNode(n.getIdentifier()); + writer.startChoiceNode(n.name(), n.size()); processedAsCompositeNode = writeChildren(n.body(), true); } else if (node instanceof UnkeyedListNode n) { - writer.startUnkeyedList(n.getIdentifier(), n.size()); + writer.startUnkeyedList(n.name(), n.size()); processedAsCompositeNode = writeChildren(n.body(), false); } else if (node instanceof UserMapNode n) { - writer.startOrderedMapNode(n.getIdentifier(), n.size()); + writer.startOrderedMapNode(n.name(), n.size()); processedAsCompositeNode = writeChildren(n.body(), true); } else if (node instanceof SystemMapNode n) { - writer.startMapNode(n.getIdentifier(), n.size()); + writer.startMapNode(n.name(), n.size()); processedAsCompositeNode = writeChildren(n.body(), true); } else if (node instanceof LeafSetNode n) { if (n.ordering() == Ordering.USER) { - writer.startOrderedLeafSet(n.getIdentifier(), n.size()); + writer.startOrderedLeafSet(n.name(), n.size()); } else { - writer.startLeafSet(n.getIdentifier(), n.size()); + writer.startLeafSet(n.name(), n.size()); } currentDepth++; processedAsCompositeNode = writeChildren(n.body(), true); @@ -313,9 +304,9 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod @Override protected boolean writeMapEntryNode(final MapEntryNode node) throws IOException { final NormalizedNodeStreamWriter writer = getWriter(); - writer.startMapEntryNode(node.getIdentifier(), node.size()); + writer.startMapEntryNode(node.name(), node.size()); - final Set qnames = node.getIdentifier().keySet(); + final Set qnames = node.name().keySet(); // Write out all the key children currentDepth++; for (final QName qname : qnames) { @@ -334,10 +325,7 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod // Write all the rest final boolean result = writeChildren(Iterables.filter(node.body(), input -> { - if (input instanceof AugmentationNode) { - return true; - } - if (!qnames.contains(input.getIdentifier().getNodeType())) { + if (!qnames.contains(input.name().getNodeType())) { return true; } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java index 49a5498c48..4b613bed45 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java @@ -37,7 +37,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.PathMixin; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.ContainerLike; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -45,7 +47,6 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -108,19 +109,22 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade final var stack = nodeAndStack.stack(); var current = nodeAndStack.node(); do { - final var next = current.enterChild(stack, qname); - checkState(next != null, "Child \"%s\" was not found in parent schema node \"%s\"", qname, - schemaNode); - iiToDataList.add(next.getIdentifier()); - schemaNode = next.getDataSchemaNode(); + final var next = current instanceof DataSchemaContext.Composite compositeCurrent + ? compositeCurrent.enterChild(stack, qname) : null; + if (next == null) { + throw new IllegalStateException( + "Child \"" + qname + "\" was not found in parent schema node \"" + schemaNode + "\""); + } + + // Careful about steps: for keyed list items the individual item does not have a PathArgument step, + // as we do not know the key values -- we supply that later + final var step = next.pathStep(); + if (step != null) { + iiToDataList.add(step); + } + schemaNode = next.dataSchemaNode(); current = next; - } while (current.isMixin()); - - // We need to unwind the last identifier if it a NodeIdentifierWithPredicates, as it does not have - // any predicates at all. The real identifier is then added below - if (stack.currentStatement() instanceof ListEffectiveStatement) { - iiToDataList.remove(iiToDataList.size() - 1); - } + } while (current instanceof PathMixin); inference = stack.toInference(); } else { @@ -134,16 +138,15 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade throw new IllegalStateException("Unknown SchemaNode " + schemaNodeContext); } - NormalizedNode parsed; - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); if (schemaNode instanceof ContainerLike || schemaNode instanceof ListSchemaNode || schemaNode instanceof LeafSchemaNode) { final XmlParserStream xmlParser = XmlParserStream.create(writer, inference); xmlParser.traverse(new DOMSource(doc.getDocumentElement())); - parsed = resultHolder.getResult(); + parsed = resultHolder.getResult().data(); // When parsing an XML source with a list root node // the new XML parser always returns a MapNode with one MapEntryNode inside. @@ -155,7 +158,8 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade } if (schemaNode instanceof ListSchemaNode && isPost()) { - iiToDataList.add(parsed.getIdentifier()); + // Supply the last item + iiToDataList.add(parsed.name()); } } else { LOG.warn("Unknown schema node extension {} was not parsed", schemaNode.getClass()); diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/YangSchemaExportBodyWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/YangSchemaExportBodyWriter.java index ca1e26742b..1563793055 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/YangSchemaExportBodyWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/YangSchemaExportBodyWriter.java @@ -11,6 +11,7 @@ import java.io.IOException; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; import java.util.concurrent.ExecutionException; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; @@ -40,6 +41,6 @@ public class YangSchemaExportBodyWriter extends AbstractSchemaExportBodyWriter { } catch (InterruptedException | ExecutionException e) { throw new WebApplicationException("Unable to retrieve source from SourceProvider.", e); } - yangTextSchemaSource.copyTo(entityStream); + yangTextSchemaSource.asByteSource(StandardCharsets.UTF_8).copyTo(entityStream); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonPatchBodyReader.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonPatchBodyReader.java index 2522cc1504..e484063709 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonPatchBodyReader.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonPatchBodyReader.java @@ -42,12 +42,11 @@ import org.opendaylight.yangtools.yang.common.ErrorTag; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -374,19 +373,12 @@ public class JsonPatchBodyReader extends AbstractPatchBodyReader { */ private static NormalizedNode readEditData(final @NonNull JsonReader in, final @NonNull Inference targetSchemaNode, final @NonNull InstanceIdentifierContext path) { - final var resultHolder = new NormalizedNodeResult(); + final var resultHolder = new NormalizationResultHolder(); final var writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); JsonParserStream.create(writer, JSONCodecFactorySupplier.RFC7951.getShared(path.getSchemaContext()), targetSchemaNode).parse(in); - // In case AugmentationNode additional step to get actual data node is required - var data = resultHolder.getResult(); - while (data instanceof AugmentationNode augNode) { - final var it = augNode.body().iterator(); - verify(it.hasNext(), "Augmentation %s is missing child", data); - data = it.next(); - } - return data; + return resultHolder.getResult().data(); } /** diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlPatchBodyReader.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlPatchBodyReader.java index 0e9fd3703b..a43f1bfbde 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlPatchBodyReader.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlPatchBodyReader.java @@ -37,7 +37,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference; import org.slf4j.Logger; @@ -112,16 +112,17 @@ public class XmlPatchBodyReader extends AbstractPatchBodyReader { } if (oper.isWithValue()) { - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final XmlParserStream xmlParser = XmlParserStream.create(writer, inference); xmlParser.traverse(new DOMSource(firstValueElement)); + final var result = resultHolder.getResult().data(); // for lists allow to manipulate with list items through their parent if (targetII.getLastPathArgument() instanceof NodeIdentifierWithPredicates) { - resultCollection.add(new PatchEntity(editId, oper, targetII.getParent(), resultHolder.getResult())); + resultCollection.add(new PatchEntity(editId, oper, targetII.getParent(), result)); } else { - resultCollection.add(new PatchEntity(editId, oper, targetII, resultHolder.getResult())); + resultCollection.add(new PatchEntity(editId, oper, targetII, result)); } } else { resultCollection.add(new PatchEntity(editId, oper, targetII)); diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java index c5e7757fcf..778a94f98d 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java @@ -9,7 +9,6 @@ package org.opendaylight.restconf.nb.rfc8040.rests.services.impl; import static java.util.Objects.requireNonNull; -import com.google.common.collect.ImmutableSet; import java.util.Set; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.Nullable; @@ -37,10 +36,8 @@ import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -77,8 +74,6 @@ final class CreateStreamUtil { private static final NodeIdentifier OUTPUT_TYPE_NODEID = NodeIdentifier.create(OUTPUT_TYPE_QNAME); private static final NodeIdentifier DEVICE_NOTIFICATION_PATH_NODEID = NodeIdentifier.create(DEVICE_NOTIFICATION_PATH_QNAME); - private static final AugmentationIdentifier SAL_REMOTE_AUG_IDENTIFIER = new AugmentationIdentifier( - ImmutableSet.of(SCOPE_QNAME, DATASTORE_QNAME, OUTPUT_TYPE_QNAME)); private CreateStreamUtil() { // Hidden on purpose @@ -263,17 +258,8 @@ final class CreateStreamUtil { } private static @Nullable String extractStringLeaf(final ContainerNode data, final NodeIdentifier childName) { - final DataContainerChild augNode = data.childByArg(SAL_REMOTE_AUG_IDENTIFIER); - if (augNode instanceof AugmentationNode) { - final DataContainerChild enumNode = ((AugmentationNode) augNode).childByArg(childName); - if (enumNode instanceof LeafNode) { - final Object value = enumNode.body(); - if (value instanceof String) { - return (String) value; - } - } - } - return null; + return data.childByArg(childName) instanceof LeafNode leafNode && leafNode.body() instanceof String str + ? str : null; } /** diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java index e8b28f3252..d77f1fd6e1 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java @@ -110,15 +110,15 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat Futures.addCallback(future, new FutureCallback() { @Override public void onSuccess(final DOMRpcResult response) { - final var errors = response.getErrors(); + final var errors = response.errors(); if (!errors.isEmpty()) { - LOG.debug("RpcError message {}", response.getErrors()); - ar.resume(new RestconfDocumentedException("RPCerror message ", null, response.getErrors())); + LOG.debug("RpcError message {}", response.errors()); + ar.resume(new RestconfDocumentedException("RPCerror message ", null, response.errors())); return; } - final NormalizedNode resultData = response.getResult(); - if (resultData == null || ((ContainerNode) resultData).isEmpty()) { + final ContainerNode resultData = response.value(); + if (resultData == null || resultData.isEmpty()) { ar.resume(new WebApplicationException(Status.NO_CONTENT)); } else { ar.resume(NormalizedNodePayload.of(context, resultData)); diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java index 0056e7b80d..308f22ce8f 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java @@ -127,7 +127,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { Futures.addCallback(resultErrors, new FutureCallback<>() { @Override public void onSuccess(final DOMRpcResult result) { - final Collection errors = result.getErrors(); + final Collection errors = result.errors(); if (!allWarnings(errors)) { Futures.whenAllComplete(discardAndUnlock()).run( () -> commitResult.setException(toCommitFailedException(errors)), @@ -139,7 +139,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { Futures.addCallback(netconfService.commit(), new FutureCallback() { @Override public void onSuccess(final DOMRpcResult rpcResult) { - final Collection errors = rpcResult.getErrors(); + final Collection errors = rpcResult.errors(); if (errors.isEmpty()) { Futures.whenAllComplete(netconfService.unlock()).run( () -> commitResult.set(CommitInfo.empty()), @@ -187,7 +187,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { private final FutureCallback lockOperationCallback = new FutureCallback<>() { @Override public void onSuccess(final DOMRpcResult rpcResult) { - if (rpcResult != null && allWarnings(rpcResult.getErrors())) { + if (rpcResult != null && allWarnings(rpcResult.errors())) { isLocked = true; } } @@ -206,7 +206,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { operationFuture = Futures.transformAsync(resultsFutures.get(0), result -> { // ... then add new operation to the chain if lock was successful - if (result != null && (result.getErrors().isEmpty() || allWarnings(result.getErrors()))) { + if (result != null && (result.errors().isEmpty() || allWarnings(result.errors()))) { return operation.get(); } else { return Futures.immediateFailedFuture(new NetconfDocumentedException("Lock operation failed", @@ -236,7 +236,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { final var builder = ImmutableList.builder(); for (ListenableFuture future : futures) { - builder.addAll(Futures.getDone(future).getErrors()); + builder.addAll(Futures.getDone(future).errors()); } return new DefaultDOMRpcResult(null, builder.build()); }, MoreExecutors.directExecutor()); @@ -266,9 +266,9 @@ final class NetconfRestconfTransaction extends RestconfTransaction { Futures.addCallback(operationResult, new FutureCallback() { @Override public void onSuccess(final DOMRpcResult rpcResult) { - if (rpcResult != null && !rpcResult.getErrors().isEmpty()) { + if (rpcResult != null && !rpcResult.errors().isEmpty()) { LOG.error("Errors occurred during processing of the RPC operation: {}", - rpcResult.getErrors().stream().map(Object::toString).collect(Collectors.joining(","))); + rpcResult.errors().stream().map(Object::toString).collect(Collectors.joining(","))); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java index ce510e3b7f..546098b748 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java @@ -29,7 +29,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -181,8 +181,8 @@ public final class PutDataTransactionUtil { public static DataSchemaNode checkListAndOrderedType(final EffectiveModelContext ctx, final YangInstanceIdentifier path) { final YangInstanceIdentifier parent = path.getParent(); - final DataSchemaContextNode node = DataSchemaContextTree.from(ctx).findChild(parent).orElseThrow(); - final DataSchemaNode dataSchemaNode = node.getDataSchemaNode(); + final DataSchemaContext node = DataSchemaContextTree.from(ctx).findChild(parent).orElseThrow(); + final DataSchemaNode dataSchemaNode = node.dataSchemaNode(); if (dataSchemaNode instanceof ListSchemaNode) { if (!((ListSchemaNode) dataSchemaNode).isUserOrdered()) { diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java index 596bd34309..d332412d23 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java @@ -26,11 +26,9 @@ import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -52,7 +50,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.builder.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; @@ -143,7 +141,7 @@ public final class ReadDataTransactionUtil { buildCont(builder, container.body(), ctxNode, trim); return builder.build(); } else if (readData instanceof MapEntryNode mapEntry) { - if (!(ctxNode.getDataSchemaNode() instanceof ListSchemaNode listSchema)) { + if (!(ctxNode.dataSchemaNode() instanceof ListSchemaNode listSchema)) { throw new IllegalStateException("Input " + mapEntry + " does not match " + ctxNode); } @@ -157,7 +155,7 @@ public final class ReadDataTransactionUtil { private static void buildMapEntryBuilder( final DataContainerNodeBuilder builder, - final Collection<@NonNull DataContainerChild> children, final DataSchemaContextNode ctxNode, + final Collection<@NonNull DataContainerChild> children, final DataSchemaContext ctxNode, final boolean trim, final List keys) { for (var child : children) { final var childCtx = getChildContext(ctxNode, child); @@ -176,15 +174,15 @@ public final class ReadDataTransactionUtil { } private static void appendContainer(final DataContainerNodeBuilder builder, final ContainerNode container, - final DataSchemaContextNode ctxNode, final boolean trim) { + final DataSchemaContext ctxNode, final boolean trim) { final var childBuilder = Builders.containerBuilder().withNodeIdentifier(container.getIdentifier()); buildCont(childBuilder, container.body(), ctxNode, trim); builder.withChild(childBuilder.build()); } private static void appendLeaf(final DataContainerNodeBuilder builder, final LeafNode leaf, - final DataSchemaContextNode ctxNode, final boolean trim, final List keys) { - if (!(ctxNode.getDataSchemaNode() instanceof LeafSchemaNode leafSchema)) { + final DataSchemaContext ctxNode, final boolean trim, final List keys) { + if (!(ctxNode.dataSchemaNode() instanceof LeafSchemaNode leafSchema)) { throw new IllegalStateException("Input " + leaf + " does not match " + ctxNode); } @@ -235,8 +233,8 @@ public final class ReadDataTransactionUtil { } private static void appendMap(final DataContainerNodeBuilder builder, final MapNode map, - final DataSchemaContextNode childCtx, final boolean trim) { - if (!(childCtx.getDataSchemaNode() instanceof ListSchemaNode listSchema)) { + final DataSchemaContext childCtx, final boolean trim) { + if (!(childCtx.dataSchemaNode() instanceof ListSchemaNode listSchema)) { throw new IllegalStateException("Input " + map + " does not match " + childCtx); } @@ -250,7 +248,7 @@ public final class ReadDataTransactionUtil { } private static void buildList(final CollectionNodeBuilder builder, - final Collection<@NonNull MapEntryNode> entries, final DataSchemaContextNode ctxNode, final boolean trim, + final Collection<@NonNull MapEntryNode> entries, final DataSchemaContext ctxNode, final boolean trim, final List<@NonNull QName> keys) { for (var entry : entries) { final var childCtx = getChildContext(ctxNode, entry); @@ -261,7 +259,7 @@ public final class ReadDataTransactionUtil { } private static void buildCont(final DataContainerNodeBuilder builder, - final Collection children, final DataSchemaContextNode ctxNode, final boolean trim) { + final Collection children, final DataSchemaContext ctxNode, final boolean trim) { for (var child : children) { final var childCtx = getChildContext(ctxNode, child); if (child instanceof ContainerNode container) { @@ -274,10 +272,11 @@ public final class ReadDataTransactionUtil { } } - private static @NonNull DataSchemaContextNode getChildContext(final DataSchemaContextNode ctxNode, + private static @NonNull DataSchemaContext getChildContext(final DataSchemaContext ctxNode, final NormalizedNode child) { - final var childId = child.getIdentifier(); - final var childCtx = ctxNode.getChild(childId); + final var childId = child.name(); + final var childCtx = ctxNode instanceof DataSchemaContext.Composite composite ? composite.childByArg(childId) + : null; if (childCtx == null) { throw new NoSuchElementException("Cannot resolve child " + childId + " in " + ctxNode); } @@ -497,14 +496,6 @@ public final class ReadDataTransactionUtil { mapValueToBuilder( ((ContainerNode) configDataNode).body(), ((ContainerNode) stateDataNode).body(), builder); - return builder.build(); - } else if (configDataNode instanceof AugmentationNode) { - final DataContainerNodeBuilder builder = Builders - .augmentationBuilder().withNodeIdentifier(((AugmentationNode) configDataNode).getIdentifier()); - - mapValueToBuilder(((AugmentationNode) configDataNode).body(), - ((AugmentationNode) stateDataNode).body(), builder); - return builder.build(); } else if (configDataNode instanceof ChoiceNode) { final DataContainerNodeBuilder builder = Builders diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractWebsocketSerializer.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractWebsocketSerializer.java index 92c7ecfbf1..32ff1adc6c 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractWebsocketSerializer.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractWebsocketSerializer.java @@ -11,9 +11,10 @@ import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.Collection; +import java.util.Comparator; import java.util.Deque; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -21,6 +22,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode; import org.opendaylight.yangtools.yang.data.tree.api.ModificationType; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; @@ -51,7 +53,7 @@ abstract class AbstractWebsocketSerializer { final boolean serializeLeafNodesOnly(final Deque path, final DataTreeCandidateNode candidate, final boolean skipData, final boolean changedLeafNodesOnly) throws T { - final var node = switch (candidate.getModificationType()) { + final var node = switch (candidate.modificationType()) { case SUBTREE_MODIFIED, APPEARED -> candidate.getDataAfter().orElseThrow(); case DELETE, DISAPPEARED -> candidate.getDataBefore().orElseThrow(); case WRITE -> changedLeafNodesOnly && isNotUpdate(candidate) ? null @@ -72,23 +74,48 @@ abstract class AbstractWebsocketSerializer { return true; } + // Retain a modicum of sanity here: children may come from different namespaces. Report children from the same + // namespace first, holding others back. Once that is done, sort the remaining children by their PathArgument + // and report them in that order. + final var myNamespace = node.name().getNodeType().getModule(); + final var heldBack = new ArrayList(); boolean ret = false; - for (var childNode : candidate.getChildNodes()) { - path.add(childNode.getIdentifier()); - ret |= serializeLeafNodesOnly(path, childNode, skipData, changedLeafNodesOnly); - path.removeLast(); + for (var childNode : candidate.childNodes()) { + final var childName = childNode.name(); + if (myNamespace.equals(childName.getNodeType().getModule())) { + ret |= serializeChild(path, childNode, skipData, changedLeafNodesOnly); + } else { + heldBack.add(childNode); + } + } + if (!heldBack.isEmpty()) { + // This is not exactly nice, as we really should be using schema definition order, but we do not have it + // available here, so we fall back to the next best thing. + heldBack.sort(Comparator.comparing(DataTreeCandidateNode::name)); + for (var childNode : heldBack) { + ret |= serializeChild(path, childNode, skipData, changedLeafNodesOnly); + } } return ret; } + private boolean serializeChild(final Deque path, final DataTreeCandidateNode childNode, + final boolean skipData, final boolean changedLeafNodesOnly) throws T { + final boolean ret; + path.add(childNode.name()); + ret = serializeLeafNodesOnly(path, childNode, skipData, changedLeafNodesOnly); + path.removeLast(); + return ret; + } + private void serializeData(final Collection dataPath, final DataTreeCandidateNode candidate, final boolean skipData) throws T { var stack = SchemaInferenceStack.of(context); - var current = DataSchemaContextTree.from(context).getRoot(); + DataSchemaContext current = DataSchemaContextTree.from(context).getRoot(); for (var arg : dataPath) { - final var next = verifyNotNull(current.enterChild(stack, arg), - "Failed to resolve %s: cannot find %s in %s", dataPath, arg, current); - current = next; + final var next = current instanceof DataSchemaContext.Composite composite ? composite.enterChild(stack, arg) + : null; + current = verifyNotNull(next, "Failed to resolve %s: cannot find %s in %s", dataPath, arg, current); } // Exit to parent if needed @@ -118,9 +145,6 @@ abstract class AbstractWebsocketSerializer { final StringBuilder pathBuilder = new StringBuilder(); for (var pathArgument : path) { - if (pathArgument instanceof AugmentationIdentifier) { - continue; - } pathBuilder.append('/'); pathBuilder.append(pathArgument.getNodeType().getNamespace().toString().replace(':', '-')); pathBuilder.append(':'); diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonDataTreeCandidateSerializer.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonDataTreeCandidateSerializer.java index 34bcf3ebbe..8bd42f8146 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonDataTreeCandidateSerializer.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonDataTreeCandidateSerializer.java @@ -58,7 +58,7 @@ final class JsonDataTreeCandidateSerializer extends AbstractWebsocketSerializer< @Override void serializeOperation(final DataTreeCandidateNode candidate) throws IOException { - jsonWriter.name("operation").value(modificationTypeToOperation(candidate, candidate.getModificationType())); + jsonWriter.name("operation").value(modificationTypeToOperation(candidate, candidate.modificationType())); } @Override diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlDataTreeCandidateSerializer.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlDataTreeCandidateSerializer.java index 92f7ebc704..ab1b9a264a 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlDataTreeCandidateSerializer.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlDataTreeCandidateSerializer.java @@ -59,7 +59,7 @@ final class XmlDataTreeCandidateSerializer extends AbstractWebsocketSerializer + * {@link DataSchemaContext} of data element grouped with identifiers of leading mixin nodes and previous path + * element.
* - identifiers of mixin nodes on the path to the target node - required for construction of full valid * DOM paths,
* - {@link LinkedPathElement} of the previous non-mixin node - required to successfully create a chain @@ -68,7 +72,7 @@ public final class NetconfFieldsTranslator { private record LinkedPathElement( @Nullable LinkedPathElement parentPathElement, @NonNull List mixinNodesToTarget, - @NonNull DataSchemaContextNode targetNode) { + @NonNull DataSchemaContext targetNode) { LinkedPathElement { requireNonNull(mixinNodesToTarget); requireNonNull(targetNode); @@ -96,10 +100,12 @@ public final class NetconfFieldsTranslator { private static @NonNull Set parseFields(final @NonNull InstanceIdentifierContext identifier, final @NonNull FieldsParam input) { - final var startNode = DataSchemaContextNode.fromDataSchemaNode((DataSchemaNode) identifier.getSchemaNode()); - if (startNode == null) { + final DataSchemaContext startNode; + try { + startNode = DataSchemaContext.of((DataSchemaNode) identifier.getSchemaNode()); + } catch (IllegalStateException e) { throw new RestconfDocumentedException( - "Start node missing in " + input, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); + "Start node missing in " + input, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, e); } final var parsed = new HashSet(); @@ -143,54 +149,74 @@ public final class NetconfFieldsTranslator { final QName childQName) { final var collectedMixinNodes = new ArrayList(); - DataSchemaContextNode currentNode = currentElement.targetNode; - DataSchemaContextNode actualContextNode = currentNode.getChild(childQName); + DataSchemaContext currentNode = currentElement.targetNode; + DataSchemaContext actualContextNode = childByQName(currentNode, childQName); if (actualContextNode == null) { - actualContextNode = resolveMixinNode(currentNode, currentNode.getIdentifier().getNodeType()); - actualContextNode = actualContextNode.getChild(childQName); + actualContextNode = resolveMixinNode(currentNode, currentNode.getPathStep().getNodeType()); + actualContextNode = childByQName(actualContextNode, childQName); } - while (actualContextNode != null && actualContextNode.isMixin()) { - final var actualDataSchemaNode = actualContextNode.getDataSchemaNode(); + while (actualContextNode != null && actualContextNode instanceof PathMixin) { + final var actualDataSchemaNode = actualContextNode.dataSchemaNode(); 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); + actualContextNode = childByQName(actualContextNode, childQName); } else if (actualDataSchemaNode instanceof LeafListSchemaNode) { // NodeWithValue is unusable - stop parsing break; } else { - collectedMixinNodes.add(actualContextNode.getIdentifier()); - actualContextNode = actualContextNode.getChild(childQName); + collectedMixinNodes.add(actualContextNode.getPathStep()); + actualContextNode = childByQName(actualContextNode, childQName); } } if (actualContextNode == null) { throw new RestconfDocumentedException("Child " + childQName.getLocalName() + " node missing in " - + currentNode.getIdentifier().getNodeType().getLocalName(), + + currentNode.getPathStep().getNodeType().getLocalName(), ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); } return new LinkedPathElement(currentElement, collectedMixinNodes, actualContextNode); } + private static @Nullable DataSchemaContext childByQName(final DataSchemaContext parent, final QName qname) { + return parent instanceof DataSchemaContext.Composite composite ? composite.childByQName(qname) : null; + } + private static YangInstanceIdentifier buildPath(final LinkedPathElement lastPathElement) { LinkedPathElement pathElement = lastPathElement; final var path = new LinkedList(); do { - path.addFirst(pathElement.targetNode.getIdentifier()); + path.addFirst(contextPathArgument(pathElement.targetNode)); path.addAll(0, pathElement.mixinNodesToTarget); pathElement = pathElement.parentPathElement; } while (pathElement.parentPathElement != null); - return YangInstanceIdentifier.create(path); + return YangInstanceIdentifier.of(path); + } + + private static @NonNull PathArgument contextPathArgument(final DataSchemaContext context) { + final var arg = context.pathStep(); + if (arg != null) { + return arg; + } + + final var schema = context.dataSchemaNode(); + if (schema instanceof ListSchemaNode listSchema && !listSchema.getKeyDefinition().isEmpty()) { + return NodeIdentifierWithPredicates.of(listSchema.getQName()); + } + if (schema instanceof LeafListSchemaNode leafListSchema) { + return new NodeWithValue<>(leafListSchema.getQName(), Empty.value()); + } + throw new UnsupportedOperationException("Unsupported schema " + schema); } - private static DataSchemaContextNode resolveMixinNode(final DataSchemaContextNode node, + private static DataSchemaContext resolveMixinNode(final DataSchemaContext node, final @NonNull QName qualifiedName) { - DataSchemaContextNode currentNode = node; - while (currentNode != null && currentNode.isMixin()) { - currentNode = currentNode.getChild(qualifiedName); + DataSchemaContext currentNode = node; + while (currentNode != null && currentNode instanceof PathMixin currentMixin) { + currentNode = currentMixin.childByQName(qualifiedName); } return currentNode; } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/WriterFieldsTranslator.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/WriterFieldsTranslator.java index 6931ca28f4..dd060be4d6 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/WriterFieldsTranslator.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/WriterFieldsTranslator.java @@ -23,7 +23,8 @@ import org.opendaylight.yangtools.yang.common.ErrorTag; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.PathMixin; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -53,8 +54,7 @@ public final class WriterFieldsTranslator { */ public static @NonNull List> translate(final @NonNull InstanceIdentifierContext identifier, final @NonNull FieldsParam input) { - final DataSchemaContextNode startNode = DataSchemaContextNode.fromDataSchemaNode( - (DataSchemaNode) identifier.getSchemaNode()); + final DataSchemaContext startNode = DataSchemaContext.of((DataSchemaNode) identifier.getSchemaNode()); if (startNode == null) { throw new RestconfDocumentedException( "Start node missing in " + input, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); @@ -67,8 +67,8 @@ public final class WriterFieldsTranslator { } private static void processSelectors(final List> parsed, final EffectiveModelContext context, - final QNameModule startNamespace, final DataSchemaContextNode startNode, - final List selectors, final int index) { + final QNameModule startNamespace, final DataSchemaContext startNode, final List selectors, + final int index) { final Set startLevel; if (parsed.size() <= index) { startLevel = new HashSet<>(); @@ -154,32 +154,34 @@ public final class WriterFieldsTranslator { * @param level current nodes level * @return {@link DataSchemaContextNode} */ - private static DataSchemaContextNode addChildToResult(final DataSchemaContextNode currentNode, - final QName childQName, final Set level) { + private static DataSchemaContext addChildToResult(final DataSchemaContext currentNode, final QName childQName, + final Set level) { // resolve parent node - final DataSchemaContextNode parentNode = resolveMixinNode( - currentNode, level, currentNode.getIdentifier().getNodeType()); + final var parentNode = resolveMixinNode(currentNode, level, currentNode.dataSchemaNode().getQName()); if (parentNode == null) { throw new RestconfDocumentedException( - "Not-mixin node missing in " + currentNode.getIdentifier().getNodeType().getLocalName(), + "Not-mixin node missing in " + currentNode.getPathStep().getNodeType().getLocalName(), ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); } // resolve child node - final DataSchemaContextNode childNode = resolveMixinNode( - parentNode.getChild(childQName), level, childQName); + final DataSchemaContext childNode = resolveMixinNode(childByQName(parentNode, childQName), level, childQName); if (childNode == null) { throw new RestconfDocumentedException( "Child " + childQName.getLocalName() + " node missing in " - + currentNode.getIdentifier().getNodeType().getLocalName(), + + currentNode.getPathStep().getNodeType().getLocalName(), ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); } // add final childNode node to level nodes - level.add(childNode.getIdentifier().getNodeType()); + level.add(childNode.dataSchemaNode().getQName()); return childNode; } + private static @Nullable DataSchemaContext childByQName(final DataSchemaContext parent, final QName qname) { + return parent instanceof DataSchemaContext.Composite composite ? composite.childByQName(qname) : null; + } + /** * Resolve mixin node by searching for inner nodes until not mixin node or null is found. * All nodes expect of not mixin node are added to current level nodes. @@ -189,12 +191,12 @@ public final class WriterFieldsTranslator { * @param qualifiedName qname of initial node * @return {@link DataSchemaContextNode} */ - private static @Nullable DataSchemaContextNode resolveMixinNode(final @Nullable DataSchemaContextNode node, + private static @Nullable DataSchemaContext resolveMixinNode(final @Nullable DataSchemaContext node, final @NonNull Set level, final @NonNull QName qualifiedName) { - DataSchemaContextNode currentNode = node; - while (currentNode != null && currentNode.isMixin()) { + DataSchemaContext currentNode = node; + while (currentNode instanceof PathMixin currentMixin) { level.add(qualifiedName); - currentNode = currentNode.getChild(qualifiedName); + currentNode = currentMixin.childByQName(qualifiedName); } return currentNode; diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java index a9b427c1bc..29a79571f9 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java @@ -29,6 +29,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.PathMixin; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -157,11 +159,11 @@ public final class YangInstanceIdentifierDeserializer { final var path = new ArrayList(); final SchemaNode node; - var parentNode = DataSchemaContextTree.from(schemaContext).getRoot(); + DataSchemaContext parentNode = DataSchemaContextTree.from(schemaContext).getRoot(); while (true) { - final var parentSchema = parentNode.getDataSchemaNode(); - if (parentSchema instanceof ActionNodeContainer) { - final var optAction = ((ActionNodeContainer) parentSchema).findAction(qname); + final var parentSchema = parentNode.dataSchemaNode(); + if (parentSchema instanceof ActionNodeContainer actionParent) { + final var optAction = actionParent.findAction(qname); if (optAction.isPresent()) { if (it.hasNext()) { throw new RestconfDocumentedException("Request path resolves to action '" + qname + "' and " @@ -182,35 +184,37 @@ public final class YangInstanceIdentifierDeserializer { } // Resolve the child step with respect to data schema tree - final var found = RestconfDocumentedException.throwIfNull(parentNode.enterChild(stack, qname), - ErrorType.PROTOCOL, ErrorTag.DATA_MISSING, "Schema for '%s' not found", qname); + final var found = RestconfDocumentedException.throwIfNull( + parentNode instanceof DataSchemaContext.Composite composite ? composite.enterChild(stack, qname) : null, + ErrorType.PROTOCOL, ErrorTag.DATA_MISSING, "Schema for '%s' not found", qname); // Now add all mixins encountered to the path var childNode = found; - while (childNode.isMixin()) { - path.add(childNode.getIdentifier()); - childNode = verifyNotNull(childNode.enterChild(stack, qname), + while (childNode instanceof PathMixin currentMixin) { + path.add(currentMixin.mixinPathStep()); + childNode = verifyNotNull(currentMixin.enterChild(stack, qname), "Mixin %s is missing child for %s while resolving %s", childNode, qname, found); } final PathArgument pathArg; - if (step instanceof ListInstance) { - final var values = ((ListInstance) step).keyValues(); - final var schema = childNode.getDataSchemaNode(); - pathArg = schema instanceof ListSchemaNode - ? prepareNodeWithPredicates(stack, qname, (ListSchemaNode) schema, values) + if (step instanceof ListInstance listStep) { + final var values = listStep.keyValues(); + final var schema = childNode.dataSchemaNode(); + pathArg = schema instanceof ListSchemaNode listSchema + ? prepareNodeWithPredicates(stack, qname, listSchema, values) : prepareNodeWithValue(stack, qname, schema, values); } else { - RestconfDocumentedException.throwIf(childNode.isKeyedEntry(), + RestconfDocumentedException.throwIf(childNode.dataSchemaNode() instanceof ListSchemaNode listChild + && !listChild.getKeyDefinition().isEmpty(), ErrorType.PROTOCOL, ErrorTag.MISSING_ATTRIBUTE, "Entry '%s' requires key or value predicate to be present.", qname); - pathArg = childNode.getIdentifier(); + pathArg = childNode.getPathStep(); } path.add(pathArg); if (!it.hasNext()) { - node = childNode.getDataSchemaNode(); + node = childNode.dataSchemaNode(); break; } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializer.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializer.java index 7f429cc22b..68f912ee59 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializer.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializer.java @@ -21,7 +21,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.PathMixin; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; @@ -51,22 +52,27 @@ public final class YangInstanceIdentifierSerializer { * @return {@link String} */ public static String create(final EffectiveModelContext schemaContext, final YangInstanceIdentifier data) { - final DataSchemaContextNode current = DataSchemaContextTree.from(schemaContext).getRoot(); + final DataSchemaContext current = DataSchemaContextTree.from(schemaContext).getRoot(); final MainVarsWrapper variables = new MainVarsWrapper(current); final StringBuilder path = new StringBuilder(); QNameModule parentModule = null; for (final PathArgument arg : data.getPathArguments()) { // get module of the parent - if (!variables.getCurrent().isMixin()) { - parentModule = variables.getCurrent().getDataSchemaNode().getQName().getModule(); + final var currentContext = variables.getCurrent(); + + if (!(currentContext instanceof PathMixin)) { + parentModule = currentContext.dataSchemaNode().getQName().getModule(); } - variables.setCurrent(variables.getCurrent().getChild(arg)); - RestconfDocumentedException.throwIf(variables.getCurrent() == null, ErrorType.APPLICATION, + final var childContext = currentContext instanceof DataSchemaContext.Composite composite + ? composite.childByArg(arg) : null; + + RestconfDocumentedException.throwIfNull(childContext, ErrorType.APPLICATION, ErrorTag.UNKNOWN_ELEMENT, "Invalid input '%s': schema for argument '%s' (after '%s') not found", data, arg, path); - if (variables.getCurrent().isMixin()) { + variables.setCurrent(childContext); + if (childContext instanceof PathMixin) { continue; } @@ -176,20 +182,18 @@ public final class YangInstanceIdentifierSerializer { } private static final class MainVarsWrapper { + private DataSchemaContext current; - private DataSchemaContextNode current; - - MainVarsWrapper(final DataSchemaContextNode current) { - this.setCurrent(current); + MainVarsWrapper(final DataSchemaContext current) { + setCurrent(current); } - public DataSchemaContextNode getCurrent() { + public DataSchemaContext getCurrent() { return current; } - public void setCurrent(final DataSchemaContextNode current) { + public void setCurrent(final DataSchemaContext current) { this.current = current; } - } } diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java index 22ad94bd09..d3c691c90a 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java @@ -28,7 +28,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -114,13 +114,13 @@ public final class TestRestconfUtils { } } - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); + final NormalizationResultHolder resultHolder = new NormalizationResultHolder(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); final XmlParserStream xmlParser = XmlParserStream.create(writer, iiContext.inference()); if (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode) { xmlParser.traverse(new DOMSource(doc.getDocumentElement())); - return resultHolder.getResult(); + return resultHolder.getResult().data(); } // FIXME : add another DataSchemaNode extensions e.g. LeafSchemaNode return null; diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java index 230b194cdb..b4afc73395 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java @@ -32,6 +32,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; @@ -122,12 +123,10 @@ public class XmlBodyReaderMountPointTest extends AbstractBodyReaderTest { XmlBodyReaderMountPointTest.class.getResourceAsStream("/invoke-rpc/xml/rpc-input.xml")); checkNormalizedNodePayload(payload); final ContainerNode contNode = (ContainerNode) payload.getData(); - final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of( - QName.create(contNode.getIdentifier().getNodeType(), "cont")); - final ContainerNode contDataNode = (ContainerNode) contNode.getChildByArg(yangCont.getLastPathArgument()); - final YangInstanceIdentifier yangLeaf = YangInstanceIdentifier.of( - QName.create(contDataNode.getIdentifier().getNodeType(), "lf")); - final DataContainerChild leafDataNode = contDataNode.getChildByArg(yangLeaf.getLastPathArgument()); + final ContainerNode contDataNode = (ContainerNode) contNode.getChildByArg( + new NodeIdentifier(QName.create(contNode.name().getNodeType(), "cont"))); + final DataContainerChild leafDataNode = contDataNode.getChildByArg( + new NodeIdentifier(QName.create(contDataNode.name().getNodeType(), "lf"))); assertTrue("lf-test".equalsIgnoreCase(leafDataNode.body().toString())); } diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java index 6a397ec752..2aec2af83b 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java @@ -13,7 +13,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import com.google.common.collect.Sets; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileNotFoundException; @@ -128,10 +127,7 @@ public class JsonBodyReaderTest extends AbstractBodyReaderTest { .getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName contAugmentQName = QName.create(augmentModule.getQNameModule(), "cont-augment"); - final YangInstanceIdentifier.AugmentationIdentifier augII = new YangInstanceIdentifier.AugmentationIdentifier( - Sets.newHashSet(contAugmentQName)); - final YangInstanceIdentifier dataII = YangInstanceIdentifier.of(dataSchemaNode.getQName()).node(augII) - .node(contAugmentQName); + final YangInstanceIdentifier dataII = YangInstanceIdentifier.of(dataSchemaNode.getQName(), contAugmentQName); final String uri = "instance-identifier-module:cont"; mockBodyReader(uri, jsonBodyReader, true); final NormalizedNodePayload payload = jsonBodyReader.readFrom(null, null, null, mediaType, null, @@ -148,12 +144,8 @@ public class JsonBodyReaderTest extends AbstractBodyReaderTest { final QName augmentChoice1QName = QName.create(augmentModule.getQNameModule(), "augment-choice1"); final QName augmentChoice2QName = QName.create(augmentChoice1QName, "augment-choice2"); final QName containerQName = QName.create(augmentChoice1QName, "case-choice-case-container1"); - final YangInstanceIdentifier.AugmentationIdentifier augChoice1II = - new YangInstanceIdentifier.AugmentationIdentifier(Sets.newHashSet(augmentChoice1QName)); - final YangInstanceIdentifier.AugmentationIdentifier augChoice2II = - new YangInstanceIdentifier.AugmentationIdentifier(Sets.newHashSet(augmentChoice2QName)); - final YangInstanceIdentifier dataII = YangInstanceIdentifier.of(dataSchemaNode.getQName()).node(augChoice1II) - .node(augmentChoice1QName).node(augChoice2II).node(augmentChoice2QName).node(containerQName); + final YangInstanceIdentifier dataII = YangInstanceIdentifier.of(dataSchemaNode.getQName()) + .node(augmentChoice1QName).node(augmentChoice2QName).node(containerQName); final String uri = "instance-identifier-module:cont"; mockBodyReader(uri, jsonBodyReader, true); final NormalizedNodePayload payload = jsonBodyReader.readFrom(null, null, null, mediaType, null, diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java index 62c2b215a5..d3e3763902 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java @@ -14,13 +14,11 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; -import com.google.common.collect.Sets; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.Collection; -import java.util.Set; import javax.ws.rs.core.MediaType; import org.junit.BeforeClass; import org.junit.Test; @@ -37,7 +35,6 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -180,10 +177,7 @@ public class XmlBodyReaderTest extends AbstractBodyReaderTest { .getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName contAugmentQName = QName.create(augmentModule.getQNameModule(), "cont-augment"); - final YangInstanceIdentifier.AugmentationIdentifier augII = new YangInstanceIdentifier.AugmentationIdentifier( - Sets.newHashSet(contAugmentQName)); - final YangInstanceIdentifier dataII = YangInstanceIdentifier.of(dataSchemaNode.getQName()).node(augII) - .node(contAugmentQName); + final YangInstanceIdentifier dataII = YangInstanceIdentifier.of(dataSchemaNode.getQName(), contAugmentQName); final String uri = "instance-identifier-module:cont"; mockBodyReader(uri, xmlBodyReader, true); final NormalizedNodePayload payload = xmlBodyReader.readFrom(null, null, null, mediaType, null, @@ -200,10 +194,7 @@ public class XmlBodyReaderTest extends AbstractBodyReaderTest { final QName augmentChoice1QName = QName.create(augmentModule.getQNameModule(), "augment-choice1"); final QName augmentChoice2QName = QName.create(augmentChoice1QName, "augment-choice2"); final YangInstanceIdentifier dataII = YangInstanceIdentifier.of(dataSchemaNode.getQName()) - .node(new AugmentationIdentifier(Set.of(augmentChoice1QName))) .node(augmentChoice1QName) - // FIXME: DataSchemaContextTree bug? case children seem to ignore augments - // .node(new AugmentationIdentifier(Set.of(augmentChoice2QName))) .node(augmentChoice2QName) .node(QName.create(augmentChoice1QName, "case-choice-case-container1")); final String uri = "instance-identifier-module:cont"; diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java index b5bc8c7ae8..21ba3ac595 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java @@ -56,8 +56,8 @@ public class CreateStreamUtilTest { final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream( prepareDomPayload("create-data-change-event-subscription", RpcDefinition::getInput, "toaster", "path"), SCHEMA_CTX); - assertEquals(List.of(), result.getErrors()); - final NormalizedNode testedNn = result.getResult(); + assertEquals(List.of(), result.errors()); + final NormalizedNode testedNn = result.value(); assertNotNull(testedNn); final NormalizedNodePayload contextRef = prepareDomPayload("create-data-change-event-subscription", RpcDefinition::getOutput, diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/Netconf799Test.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/Netconf799Test.java index 034a026bd5..948e2475f2 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/Netconf799Test.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/Netconf799Test.java @@ -71,7 +71,7 @@ public class Netconf799Test { mock(RestconfStreamsSubscriptionService.class), actionService, new StreamsConfiguration(0, 1, 0, false)); final var nodeAndStack = DataSchemaContextTree.from(contextRef).enterPath(ACTION_YII).orElseThrow(); - final var node = nodeAndStack.node().getDataSchemaNode(); + final var node = nodeAndStack.node().dataSchemaNode(); assertThat(node, instanceOf(ActionNodeContainer.class)); final var actionNode = ((ActionNodeContainer) node).findAction(RESET_QNAME).orElseThrow(); final var stack = nodeAndStack.stack(); diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java index c83bbdb57e..35249dfbb9 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java @@ -125,8 +125,8 @@ public class RestconfInvokeOperationsServiceImplTest { final DOMRpcResult mockResult = new DefaultDOMRpcResult(OUTPUT, List.of()); doReturn(immediateFluentFuture(mockResult)).when(rpcService).invokeRpc(RPC, INPUT); final DOMRpcResult rpcResult = RestconfInvokeOperationsServiceImpl.invokeRpc(INPUT, RPC, rpcService).get(); - assertTrue(rpcResult.getErrors().isEmpty()); - assertEquals(OUTPUT, rpcResult.getResult()); + assertTrue(rpcResult.errors().isEmpty()); + assertEquals(OUTPUT, rpcResult.value()); } @Test @@ -136,8 +136,8 @@ public class RestconfInvokeOperationsServiceImplTest { "No implementation of RPC " + errorRpc + " available."); doReturn(immediateFailedFluentFuture(exception)).when(rpcService).invokeRpc(errorRpc, INPUT); final DOMRpcResult rpcResult = RestconfInvokeOperationsServiceImpl.invokeRpc(INPUT, errorRpc, rpcService).get(); - assertNull(rpcResult.getResult()); - final Collection errorList = rpcResult.getErrors(); + assertNull(rpcResult.value()); + final Collection errorList = rpcResult.errors(); assertEquals(1, errorList.size()); final RpcError actual = errorList.iterator().next(); assertEquals("No implementation of RPC " + errorRpc + " available.", actual.getMessage()); @@ -151,8 +151,8 @@ public class RestconfInvokeOperationsServiceImplTest { final DOMRpcResult mockResult = new DefaultDOMRpcResult(OUTPUT, List.of()); doReturn(immediateFluentFuture(mockResult)).when(rpcService).invokeRpc(RPC, INPUT); final DOMRpcResult rpcResult = RestconfInvokeOperationsServiceImpl.invokeRpc(INPUT, RPC, mountPoint).get(); - assertTrue(rpcResult.getErrors().isEmpty()); - assertEquals(OUTPUT, rpcResult.getResult()); + assertTrue(rpcResult.errors().isEmpty()); + assertEquals(OUTPUT, rpcResult.value()); } @Test @@ -167,8 +167,8 @@ public class RestconfInvokeOperationsServiceImplTest { doReturn(immediateFluentFuture(new DefaultDOMRpcResult(OUTPUT, List.of()))) .when(rpcService).invokeRpc(RPC, INPUT); final DOMRpcResult rpcResult = RestconfInvokeOperationsServiceImpl.invokeRpc(INPUT, RPC, rpcService).get(); - assertTrue(rpcResult.getErrors().isEmpty()); - assertEquals(OUTPUT, rpcResult.getResult()); + assertTrue(rpcResult.errors().isEmpty()); + assertEquals(OUTPUT, rpcResult.value()); } private NormalizedNodePayload prepNNC(final ContainerNode result) { @@ -180,7 +180,7 @@ public class RestconfInvokeOperationsServiceImplTest { final ContainerNode data = mock(ContainerNode.class); final DOMRpcResult domRpcResult = mock(DOMRpcResult.class); doReturn(immediateFluentFuture(domRpcResult)).when(rpcService).invokeRpc(qname, data); - doReturn(result).when(domRpcResult).getResult(); + doReturn(result).when(domRpcResult).value(); return NormalizedNodePayload.of( InstanceIdentifierContext.ofRpcInput(CONTEXT, schemaNode, null), data); } diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java index 7760452113..1d410873f7 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java @@ -12,9 +12,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.time.Instant; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Set; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -27,10 +24,8 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -156,8 +151,7 @@ public class JsonNotificationListenerTest { final DOMNotification notificationData = mock(DOMNotification.class); final LeafNode leaf = mockLeaf(QName.create(MODULE, "lf-augm")); - final AugmentationNode augm = mockAugm(leaf); - final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), augm); + final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), leaf); when(notificationData.getType()).thenReturn(schemaPathNotifi); when(notificationData.getBody()).thenReturn(notifiBody); @@ -169,22 +163,9 @@ public class JsonNotificationListenerTest { assertTrue(result.contains("lf-augm" + '"' + ":" + '"' + "value")); } - private static AugmentationNode mockAugm(final LeafNode leaf) { - final AugmentationNode augm = mock(AugmentationNode.class); - final AugmentationIdentifier augmId = new AugmentationIdentifier(Set.of(leaf.getIdentifier().getNodeType())); - when(augm.getIdentifier()).thenReturn(augmId); - - final Collection childs = new ArrayList<>(); - childs.add(leaf); - - when(augm.body()).thenReturn(childs); - return augm; - } - private static MapEntryNode mockMapEntry(final QName entryQName, final LeafNode leaf) { return Builders.mapEntryBuilder() - .withNodeIdentifier(NodeIdentifierWithPredicates.of(entryQName, leaf.getIdentifier().getNodeType(), - leaf.body())) + .withNodeIdentifier(NodeIdentifierWithPredicates.of(entryQName, leaf.name().getNodeType(), leaf.body())) .withChild(leaf) .build(); } diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java index 2fe629e096..6b96aca63d 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java @@ -12,9 +12,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.time.Instant; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Set; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -27,10 +24,8 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -154,8 +149,7 @@ public class XmlNotificationListenerTest { final DOMNotification notificationData = mock(DOMNotification.class); final LeafNode leaf = mockLeaf(QName.create(MODULE, "lf-augm")); - final AugmentationNode augm = mockAugm(leaf); - final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), augm); + final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), leaf); when(notificationData.getType()).thenReturn(schemaPathNotifi); when(notificationData.getBody()).thenReturn(notifiBody); @@ -177,22 +171,9 @@ public class XmlNotificationListenerTest { .areSimilar(); } - private static AugmentationNode mockAugm(final LeafNode leaf) { - final AugmentationNode augm = mock(AugmentationNode.class); - final AugmentationIdentifier augmId = new AugmentationIdentifier(Set.of(leaf.getIdentifier().getNodeType())); - when(augm.getIdentifier()).thenReturn(augmId); - - final Collection childs = new ArrayList<>(); - childs.add(leaf); - - when(augm.body()).thenReturn(childs); - return augm; - } - private static MapEntryNode mockMapEntry(final QName entryQName, final LeafNode leaf) { return Builders.mapEntryBuilder() - .withNodeIdentifier(NodeIdentifierWithPredicates.of(entryQName, leaf.getIdentifier().getNodeType(), - leaf.body())) + .withNodeIdentifier(NodeIdentifierWithPredicates.of(entryQName, leaf.name().getNodeType(), leaf.body())) .withChild(leaf) .build(); } diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslatorTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslatorTest.java index 9f61e45443..f7a8feead5 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslatorTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslatorTest.java @@ -8,8 +8,6 @@ */ package org.opendaylight.restconf.nb.rfc8040.utils.parser; -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import java.util.List; @@ -21,7 +19,6 @@ import org.opendaylight.restconf.api.query.FieldsParam; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -45,7 +42,7 @@ public class NetconfFieldsTranslatorTest extends AbstractFieldsTranslatorTest result) { + protected void assertKeyedList(final List result) { assertEquals(1, result.size()); } @@ -90,7 +87,7 @@ public class NetconfFieldsTranslatorTest extends AbstractFieldsTranslatorTest result) { assertEquals(1, result.size()); final var augmentedLibraryPath = assertPath(result, AUGMENTED_LIBRARY_Q_NAME); - assertEquals(2, augmentedLibraryPath.getPathArguments().size()); + assertEquals(1, augmentedLibraryPath.getPathArguments().size()); } @Override @@ -174,10 +171,9 @@ public class NetconfFieldsTranslatorTest extends AbstractFieldsTranslatorTest result = YangInstanceIdentifierDeserializer.create(SCHEMA_CONTEXT, "deserializer-test-included:augmented-list=100/deserializer-test:augmented-leaf") .path.getPathArguments(); - assertEquals(4, result.size()); + assertEquals(3, result.size()); // list final QName list = QName.create("deserializer:test:included", "2016-06-06", "augmented-list"); @@ -630,10 +629,8 @@ public class YangInstanceIdentifierDeserializerTest { result.get(1)); // augmented leaf - final QName augLeaf = QName.create("deserializer:test", "2016-06-06", "augmented-leaf"); - final QName augList = QName.create("deserializer:test", "2016-06-06", "augmenting-list"); - assertEquals(new AugmentationIdentifier(Set.of(augLeaf, augList)), result.get(2)); - assertEquals(NodeIdentifier.create(augLeaf), result.get(3)); + assertEquals(NodeIdentifier.create(QName.create("deserializer:test", "2016-06-06", "augmented-leaf")), + result.get(2)); } @Test @@ -641,7 +638,7 @@ public class YangInstanceIdentifierDeserializerTest { final List result = YangInstanceIdentifierDeserializer.create(SCHEMA_CONTEXT, "deserializer-test-included:augmented-list=100/deserializer-test:augmenting-list=0") .path.getPathArguments(); - assertEquals(5, result.size()); + assertEquals(4, result.size()); // list final QName list = QName.create("deserializer:test:included", "2016-06-06", "augmented-list"); @@ -650,11 +647,9 @@ public class YangInstanceIdentifierDeserializerTest { result.get(1)); // augmented list - final QName augLeaf = QName.create("deserializer:test", "2016-06-06", "augmented-leaf"); final QName augList = QName.create("deserializer:test", "2016-06-06", "augmenting-list"); - assertEquals(new AugmentationIdentifier(Set.of(augLeaf, augList)), result.get(2)); - assertEquals(NodeIdentifier.create(augList), result.get(3)); - assertEquals(NodeIdentifierWithPredicates.of(augList, QName.create(augList, "id"), 0), result.get(4)); + assertEquals(NodeIdentifier.create(augList), result.get(2)); + assertEquals(NodeIdentifierWithPredicates.of(augList, QName.create(augList, "id"), 0), result.get(3)); } /** diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializerTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializerTest.java index 7fcb0f42a2..f9d62a4ea2 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializerTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializerTest.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import com.google.common.collect.ImmutableSet; import java.util.LinkedHashMap; import java.util.Map; import org.junit.AfterClass; @@ -21,7 +20,6 @@ import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -312,7 +310,6 @@ public class YangInstanceIdentifierSerializerTest { final YangInstanceIdentifier data = YangInstanceIdentifier.builder() .node(list) .node(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), 100)) - .node(new AugmentationIdentifier(ImmutableSet.of(child))) .node(child) .build(); @@ -337,7 +334,6 @@ public class YangInstanceIdentifierSerializerTest { final YangInstanceIdentifier data = YangInstanceIdentifier.builder() .node(list) .node(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), 100)) - .node(new AugmentationIdentifier(ImmutableSet.of(child))) .node(child) .build(); diff --git a/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-create.xml b/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-create.xml index aff6471ebd..522acbce34 100644 --- a/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-create.xml +++ b/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-create.xml @@ -20,20 +20,20 @@ created - - /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1 - + /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1 - ChoiceLeaf + AugmentLeaf created - /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1 + + /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1 + - AugmentLeaf + ChoiceLeaf created - \ No newline at end of file + diff --git a/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-update.xml b/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-update.xml index 19b3bf61eb..684e28fba3 100644 --- a/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-update.xml +++ b/restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-update.xml @@ -20,20 +20,20 @@ created - - /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1 - + /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1 - ChoiceUpdate + AugmentLeaf updated - /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1 + + /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1 + - AugmentLeaf + ChoiceUpdate updated - \ No newline at end of file + diff --git a/restconf/sal-rest-connector-config/pom.xml b/restconf/sal-rest-connector-config/pom.xml index 4469e33410..09f64395e6 100644 --- a/restconf/sal-rest-connector-config/pom.xml +++ b/restconf/sal-rest-connector-config/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/third-party/pom.xml b/third-party/pom.xml index ffa30359c3..338c549924 100644 --- a/third-party/pom.xml +++ b/third-party/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/third-party/shaded-exificient-jar/pom.xml b/third-party/shaded-exificient-jar/pom.xml index eee4321459..a5ede6df85 100644 --- a/third-party/shaded-exificient-jar/pom.xml +++ b/third-party/shaded-exificient-jar/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent - 12.0.6 + 13.0.1 diff --git a/third-party/shaded-exificient/pom.xml b/third-party/shaded-exificient/pom.xml index b5fe9ba665..6a17158739 100644 --- a/third-party/shaded-exificient/pom.xml +++ b/third-party/shaded-exificient/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent bundle-parent - 12.0.6 + 13.0.1 diff --git a/third-party/shaded-sshd-jar/pom.xml b/third-party/shaded-sshd-jar/pom.xml index 8f8092d830..3646230c7a 100644 --- a/third-party/shaded-sshd-jar/pom.xml +++ b/third-party/shaded-sshd-jar/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent - 12.0.6 + 13.0.1 diff --git a/third-party/shaded-sshd/pom.xml b/third-party/shaded-sshd/pom.xml index 4593d47c47..f48cedcbb5 100644 --- a/third-party/shaded-sshd/pom.xml +++ b/third-party/shaded-sshd/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent bundle-parent - 12.0.6 + 13.0.1 diff --git a/transport/pom.xml b/transport/pom.xml index 88b5e809dd..5a0b744aae 100644 --- a/transport/pom.xml +++ b/transport/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1 diff --git a/transport/transport-ssh/src/test/java/org/opendaylight/netconf/transport/ssh/SshClientServerTest.java b/transport/transport-ssh/src/test/java/org/opendaylight/netconf/transport/ssh/SshClientServerTest.java index 43178c84d1..f31fa26817 100644 --- a/transport/transport-ssh/src/test/java/org/opendaylight/netconf/transport/ssh/SshClientServerTest.java +++ b/transport/transport-ssh/src/test/java/org/opendaylight/netconf/transport/ssh/SshClientServerTest.java @@ -115,7 +115,7 @@ public class SshClientServerTest { // create temp socket to get available port for test socket = new ServerSocket(0); - final var localAddress = IetfInetUtil.INSTANCE.ipAddressFor(InetAddress.getLoopbackAddress()); + final var localAddress = IetfInetUtil.ipAddressFor(InetAddress.getLoopbackAddress()); final var localPort = new PortNumber(Uint16.valueOf(socket.getLocalPort())); socket.close(); diff --git a/transport/transport-tcp/src/main/java/org/opendaylight/netconf/transport/tcp/TCPTransportStack.java b/transport/transport-tcp/src/main/java/org/opendaylight/netconf/transport/tcp/TCPTransportStack.java index 1bf28ba3c5..a77983b959 100644 --- a/transport/transport-tcp/src/main/java/org/opendaylight/netconf/transport/tcp/TCPTransportStack.java +++ b/transport/transport-tcp/src/main/java/org/opendaylight/netconf/transport/tcp/TCPTransportStack.java @@ -36,6 +36,6 @@ public abstract sealed class TCPTransportStack extends AbstractTransportStack org.opendaylight.odlparent odlparent-lite - 12.0.6 + 13.0.1