Bump upstreams 33/106533/19
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 19 Jun 2023 12:03:25 +0000 (14:03 +0200)
committerRobert Varga <nite@hq.sk>
Thu, 22 Jun 2023 16:31:44 +0000 (16:31 +0000)
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 <robert.varga@pantheon.tech>
155 files changed:
apps/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/ContextKey.java
apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundSshServer.java
apps/netconf-nb/src/main/java/org/opendaylight/netconf/northbound/NetconfNorthboundTcpServer.java
apps/netconf-topology-impl/pom.xml
apps/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java
apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java
apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java
apps/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeManagerTest.java
apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java
apps/pom.xml
artifacts/pom.xml
features/features-netconf-experimental/pom.xml
features/features-netconf-testing/pom.xml
features/features-netconf/pom.xml
features/odl-aaa-netconf-plugin/src/main/feature/feature.xml
features/odl-netconf-api/src/main/feature/feature.xml
features/odl-netconf-client/src/main/feature/feature.xml
features/odl-netconf-connector/src/main/feature/feature.xml
features/odl-netconf-impl/src/main/feature/feature.xml
features/odl-netconf-model-rfc5277/src/main/feature/feature.xml
features/odl-netconf-model-rfc6022/src/main/feature/feature.xml
features/odl-netconf-model-rfc6241/src/main/feature/feature.xml
features/odl-netconf-model-rfc8040/src/main/feature/feature.xml
features/odl-netconf-model-rfc8341/src/main/feature/feature.xml
features/odl-netconf-model-rfc8526/src/main/feature/feature.xml
features/odl-netconf-model-rfc8639/src/main/feature/feature.xml
features/odl-netconf-netty-util/src/main/feature/feature.xml
features/odl-netconf-transport-api/src/main/feature/feature.xml
features/odl-netconf-util/src/main/feature/feature.xml
features/odl-restconf-common/src/main/feature/feature.xml
features/odl-restconf-nb/src/main/feature/feature.xml
features/odl-restconf-openapi/src/main/feature/feature.xml
features/odl-yanglib/src/main/feature/feature.xml
features/parent/pom.xml
features/pom.xml
karaf-static/pom.xml
karaf/pom.xml
keystore/pom.xml
model/pom.xml
netconf/callhome-protocol/pom.xml
netconf/netconf-config/pom.xml
netconf/netconf-netty-util/pom.xml
netconf/pom.xml
netconf/tools/netconf-testtool/pom.xml
netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java
netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/MonitoringSession.java
netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java
netconf/tools/pom.xml
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java
parent/pom.xml
plugins/netconf-client-mdsal/pom.xml
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/CachedYangTextSchemaSource.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/DeviceMountPointContext.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibraryModulesSchemas.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaSourceProvider.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/MonitoringSchemaSourceProvider.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfDevice.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfDeviceSchema.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfMountPointContextFactory.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemas.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/api/RemoteDeviceId.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/BaseSchema.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOps.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformUtil.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformer.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/NetconfRpcStructureTransformer.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/AbstractNetconfDataTreeService.java
plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBroker.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/LibrarySchemaYangSourceProviderTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfNestedNotificationTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfStateSchemasTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToNotificationTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/NetconfToRpcRequestTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfBaseOpsTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/impl/NetconfMessageTransformerTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/FieldsAwareReadOnlyTxTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDataTreeServiceImplTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceDataBrokerTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceRpcTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceSalFacadeTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/NetconfDeviceWriteOnlyTxTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/ReadOnlyTxTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateRunningTxTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteCandidateTxTest.java
plugins/netconf-client-mdsal/src/test/java/org/opendaylight/netconf/client/mdsal/spi/WriteRunningTxTest.java
plugins/netconf-common-mdsal/pom.xml
plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/EmptyListXmlMetadataWriter.java
plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/NormalizedDataUtil.java
plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/ProxyMountPointContext.java
plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/StreamingContext.java
plugins/netconf-dom-api/pom.xml
plugins/netconf-server-mdsal/pom.xml
plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/MdsalNetconfOperationServiceFactory.java
plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/ComponentNormalizedNodeStreamWriter.java
plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/CopyConfig.java
plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/EditConfig.java
plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java
plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/SplittingNormalizedNodeMetadataStreamWriter.java
plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/AbstractNetconfOperationTest.java
plugins/netconf-server-mdsal/src/test/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpcTest.java
plugins/pom.xml
pom.xml
protocol/netconf-api/pom.xml
protocol/netconf-client/pom.xml
protocol/netconf-test-util/pom.xml
protocol/pom.xml
restconf/pom.xml
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java
restconf/restconf-nb/pom.xml
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/databind/DatabindContext.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/YangSchemaExportBodyWriter.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonPatchBodyReader.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlPatchBodyReader.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractWebsocketSerializer.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonDataTreeCandidateSerializer.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlDataTreeCandidateSerializer.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslator.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/WriterFieldsTranslator.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializer.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/Netconf799Test.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslatorTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifierTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializerTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierSerializerTest.java
restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-create.xml
restconf/restconf-nb/src/test/resources/listener-adapter-test/notif-leaves-update.xml
restconf/sal-rest-connector-config/pom.xml
third-party/pom.xml
third-party/shaded-exificient-jar/pom.xml
third-party/shaded-exificient/pom.xml
third-party/shaded-sshd-jar/pom.xml
third-party/shaded-sshd/pom.xml
transport/pom.xml
transport/transport-ssh/src/test/java/org/opendaylight/netconf/transport/ssh/SshClientServerTest.java
transport/transport-tcp/src/main/java/org/opendaylight/netconf/transport/tcp/TCPTransportStack.java
transport/transport-tcp/src/test/java/org/opendaylight/netconf/transport/tcp/TCPClientServerTest.java
transport/transport-tls/src/test/java/org/opendaylight/netconf/transport/tls/TlsClientServerTest.java
truststore/pom.xml

index f6f21c67406b515a88067c5b0169ee89d450d8e3..729dff2a56576e4d65db967da9f7b0ff7a61c6cb 100644 (file)
@@ -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())));
     }
index aca92575a64ad1794e5abb55450f59c8da52d7b5..32acf745f4295465d0fcf198ec9fc8b1d88c33a9 100644 (file)
@@ -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);
     }
 }
index 392c922684359050890ddea282b4da16de97aa2b..bc35f81c54eb4a999f12c1f6197ba72603bb29d3 100644 (file)
@@ -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);
     }
 }
index ed5b0f2b2929d0b0520e9e2d160bc2402884fc65..471949a2d06f7eec524ccf806f4571e9d747ba60 100644 (file)
             <groupId>org.opendaylight.netconf</groupId>
             <artifactId>netconf-topology</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>com.guicedee.services</groupId>
             <artifactId>javax.inject</artifactId>
index 86722755e8d82f39fd920dcd7384f0687b098592..57546b3e692c2601d19145c27a847e9f049a65a5 100644 (file)
@@ -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;
index 3f943fb7b3b19ce0c0585618b125fa9ce9f7f94e..342819a631e60cd68e3f9f1e03e13743ea5e6317 100644 (file)
@@ -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));
 
index 6b88c8131201418eb75f35765d2993970dc6b687..de8ef3a3a12cfbdf3b832753a3d37577d05554bf 100644 (file)
@@ -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() : "";
-        }
-    }
 }
index 6354ca5da872aeaad2f6ac7d744c3499628a2d4f..6d586514cdd35a9a2ac2907fe6dd057294217b1a 100644 (file)
@@ -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());
 
index 0e1c8471634995affde77f3e004d16584f70b82f..a3b0542238e1d7c448d8e7ba424bc94ef89c581f 100644 (file)
@@ -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);
     }
 
index 37ff0bc8eaa9c695962ca8314c76684a5ed18982..dd8edb566196486e6fa1be006db8c65430fef4c8 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 5c4ac9fcf798d2c70d235d013bd06128158e1c3d..4431099bf69f11a4624b7b419b0097a4cd3a9063 100644 (file)
@@ -14,7 +14,7 @@
     <parent>
       <groupId>org.opendaylight.odlparent</groupId>
       <artifactId>odlparent-lite</artifactId>
-      <version>12.0.6</version>
+      <version>13.0.1</version>
       <relativePath/>
     </parent>
 
index a3b2bba6e4d1e1730d294c0fef2faceb17d039ee..66f87d3a15770c43ce31f4b601f7ef020e5b53db 100644 (file)
@@ -14,7 +14,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 4cad6cc824927921327fe492557afd092d5112c2..b65624d27a08885488e1c3daf37a4d37a40bb1d9 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
       <groupId>org.opendaylight.odlparent</groupId>
       <artifactId>feature-repo-parent</artifactId>
-      <version>12.0.6</version>
+      <version>13.0.1</version>
       <relativePath/>
   </parent>
 
index f63151eba906edff0411dfb001db9f843e53b50a..c880546842902f67da59303f5b3904e294383df2 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 6f3f01a301cb98d4a6d6ad5949f175e4789715ed..3b0f8a4b5929fa2b99f541d4fc1f3d11665b7c31 100644 (file)
@@ -7,6 +7,6 @@
  -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-aaa-netconf-plugin">
     <feature name="odl-aaa-netconf-plugin">
-        <feature version="[0.17,1)">odl-aaa-shiro</feature>
+        <feature version="[0.18,1)">odl-aaa-shiro</feature>
     </feature>
 </features>
index 0349f5548b94cd4a82c7f7ec068ca7468f867098..496c9002d799ee30835808a7f0d97dd1ba27be14 100644 (file)
@@ -8,7 +8,7 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-api" version="${project.version}">
-        <feature version="[12,13)">odl-netty-4</feature>
-        <feature version="[11,12)">odl-mdsal-model-rfc8525</feature>
+        <feature version="[13,14)">odl-netty-4</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8525</feature>
     </feature>
 </features>
index 45686d31320d399bf8c3bd8b1e7dbb38985348fa..8a95fcc95e55afc8062560317881212685836137 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-client-${project.version}">
     <feature name="odl-netconf-client" version="${project.version}">
-        <feature version="[7,8)">odl-controller-exp-netty-config</feature>
+        <feature version="[8,9)">odl-controller-exp-netty-config</feature>
     </feature>
 </features>
index e311ab738907388fe6be576bf73493fcc0ce5e46..25836d6db5ab38611045c6fcf4eb660f90ff61a8 100644 (file)
@@ -8,8 +8,8 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-connector" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
-        <feature version="[7,8)">odl-mdsal-broker</feature>
-        <feature version="[0.17,1)">odl-aaa-encryption-service</feature>
+        <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[0.18,1)">odl-aaa-encryption-service</feature>
     </feature>
 </features>
index 508df3fb901a7dfe5850cdbf16466adb6e3e4860..46ce8c13cca584c5125fbd6da418b4be24b96d34 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-impl-${project.version}">
     <feature name="odl-netconf-impl" version="${project.version}">
-        <feature version="[7,8)">odl-controller-exp-netty-config</feature>
+        <feature version="[8,9)">odl-controller-exp-netty-config</feature>
     </feature>
 </features>
index c505caf865fd075739f1520901fc6ebedf8e1859..3bf3acf6990fd01b64c11e0838d425128a1e380f 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-model-rfc5277" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc6991</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
     </feature>
 </features>
index 64f21e5c968b727062574d4405967257f4095d9d..d1e0bad69241f93bfb7a521860be5754fc055948 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-model-rfc6022" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc6991</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
     </feature>
 </features>
index 5eb64b969e9d12454eb1c2ca46e91f264d6f2d94..6af212fd2dd68bcf1249380647258c3f7b6b4038 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-model-rfc6241" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc6991</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
     </feature>
 </features>
index 652c8e377947bb270bb499c8ae0fccbdd896d275..d083b39d46199ba4673b0e1ee1537f4c30a764f2 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-model-rfc8040" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc6991</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
     </feature>
 </features>
index 58604263a7067b85a8e792eb271e59f41ef9ca5f..37e0626c9fdc89e49e8f406035684dc157996442 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-model-rfc8341" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc6991</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
     </feature>
 </features>
index e3686dac4e7dc76a0e66d0f9fb29f9f8a6889c4c..4dd9b2915aeda22d2dad81916c2dd9453e6e5082 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-model-rfc8526" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc8342</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8342</feature>
     </feature>
 </features>
index 2b38f01ea4d432eaa5e39fac31fa5672bbdd24a3..9fdffe4621bd0b53885ce038202cafe87c2466a0 100644 (file)
@@ -8,9 +8,9 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-model-rfc8639" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc8040</feature>
-        <feature version="[11,12)">odl-mdsal-model-rfc8343</feature>
-        <feature version="[11,12)">odl-mdsal-model-rfc8528</feature>
-        <feature version="[11,12)">odl-mdsal-model-rfc8529</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8040</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8343</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8528</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8529</feature>
     </feature>
 </features>
index 499aab2515716096ea794399621cf9a68ec70b82..4cf8778f7480bf313b90e4cdf23d006895210add 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="odl-netconf-netty-util-${project.version}">
     <feature name="odl-netconf-netty-util" version="${project.version}">
-        <feature version="[12,13)">odl-netty-4</feature>
-        <feature version="[0.17,1)">odl-aaa-encryption-service</feature>
+        <feature version="[13,14)">odl-netty-4</feature>
+        <feature version="[0.18,1)">odl-aaa-encryption-service</feature>
     </feature>
 </features>
index 1e592d530773817ab398dfad69ae0a25bc85314f..aa63f407ceb52005ec71f8f836c11c399b3006a8 100644 (file)
@@ -8,7 +8,7 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-transport-api" version="${project.version}">
-        <feature version="[12,13)">odl-netty-4</feature>
-        <feature version="[10,11)">odl-yangtools-common</feature>
+        <feature version="[13,14)">odl-netty-4</feature>
+        <feature version="[11,12)">odl-yangtools-common</feature>
     </feature>
 </features>
index 7ea41309d07a6b22100f3f2c93e49941cd12f4b5..bb732998b743b11d2ddcb0f56ee7be5ea0eb14c8 100644 (file)
@@ -8,6 +8,6 @@
  -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-util" version="${project.version}">
-        <feature version="[10,11)">odl-yangtools-codec</feature>
+        <feature version="[11,12)">odl-yangtools-codec</feature>
     </feature>
 </features>
index 8894da117f958fdb518f1c07b653349d4cac4277..a2d5e9d3bb4892bdb26670eec067dc86c08eed2d 100644 (file)
@@ -8,11 +8,11 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-restconf-common" version="${project.version}">
-        <feature version="[12,13)">odl-karaf-feat-jetty</feature>
-        <feature version="[10,11)">odl-yangtools-export</feature>
-        <feature version="[11,12)">odl-mdsal-model-rfc8040</feature>
-        <feature version="[11,12)">odl-mdsal-model-rfc8525</feature>
-        <feature version="[7,8)">odl-mdsal-broker</feature>
-        <feature version="[0.17,1)">odl-aaa-shiro</feature>
+        <feature version="[13,14)">odl-karaf-feat-jetty</feature>
+        <feature version="[11,12)">odl-yangtools-export</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8040</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8525</feature>
+        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[0.18,1)">odl-aaa-shiro</feature>
     </feature>
 </features>
index 79e8c6f56daa472aeb53d8966605936240085bc2..dc53f8a52ca27c8b87ea6b37563c5ba769f2d35a 100644 (file)
@@ -8,8 +8,8 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-restconf-nb-${project.version}">
     <feature name="odl-restconf-nb" version="${project.version}">
-        <feature version="[11,12)">odl-mdsal-model-rfc8072</feature>
-        <feature version="[7,8)">odl-controller-exp-netty-config</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8072</feature>
+        <feature version="[8,9)">odl-controller-exp-netty-config</feature>
         <configfile finalname="etc/org.opendaylight.restconf.nb.rfc8040.cfg">
             mvn:org.opendaylight.netconf/restconf-nb/${project.version}/cfg/config
         </configfile>
index 563b38fd0373afa70af05e064d98b61ef930106d..c53f83bb698a893f72ea0e5f167f6852b4400be9 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-restconf-openapi" version="${project.version}">
-        <feature version="[12,13)">odl-jackson-2</feature>
+        <feature version="[13,14)">odl-jackson-2</feature>
     </feature>
 </features>
index 246b91782af15c41bee896b37dcade7237cc7805..8f4869c63b8b9e3d245ee1cc2665533e0c0a9fa8 100644 (file)
@@ -8,8 +8,8 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-yanglib" version="${project.version}">
-        <feature version="[12,13)">odl-karaf-feat-jetty</feature>
-        <feature version="[11,12)">odl-mdsal-model-rfc8525</feature>
+        <feature version="[13,14)">odl-karaf-feat-jetty</feature>
+        <feature version="[12,13)">odl-mdsal-model-rfc8525</feature>
         <configfile finalname="etc/opendaylight/datastore/initial/config/yanglib-config.xml">
             mvn:org.opendaylight.netconf/yanglib/${project.version}/xml/config
         </configfile>
index 5eb7d78e1a4d93690fd9149bd58ffcddd8afc643..ca0849dfebb8572dbad5f83e37c7bf606aa3f457 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index af4e508a97a444fe180c56aedd6c6ebb947313f8..a674161d002734efb7ec6918071212f25b17229a 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 8a6f902da5c607f758553e4f2ebb070595324a1f..7405320781e14ad2f742ff17f0ff939082b7f7cb 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>karaf-dist-static</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 9fe02b716ff904354764302c44cde2278e73c4e9..57156eceae4f831487132ca54b8f83a2f87abe13 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>12.0.6</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
   <groupId>org.opendaylight.netconf</groupId>
       <dependency>
         <groupId>org.opendaylight.infrautils</groupId>
         <artifactId>infrautils-artifacts</artifactId>
-        <version>5.0.5</version>
+        <version>6.0.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>controller-artifacts</artifactId>
-        <version>7.0.8</version>
+        <version>8.0.0-SNAPSHOT</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
index ff76f3ae121a50f418b21036c1994959053595e1..0d14c5ab814a42b52f28f89971ea60adf198cbad 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 83959aabe2530477765508922203eb8a3cbc3819..0a6fb0b69ec3ebc357ce06c2861691541728f69d 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 296d70dc56f9594dbd9a53711bddea838be25711..d5d8067ce93c7fa2fd1c3c884d424624442938b2 100644 (file)
   <packaging>bundle</packaging>
 
   <dependencies>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
index 7ec0dca3f4513fb46a503d92b016af6e341a2e15..18c1daca23a2b56eff0a5416c9bc855874b4235a 100644 (file)
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.jdt</groupId>
+            <artifactId>org.eclipse.jdt.annotation</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>threadpool-config-api</artifactId>
index a6a6006da932a34ca7b931304f3053ad1c0b2bf6..19ecbfc5d8a4cde6e25634c16b383b0d5f319aa1 100644 (file)
 
   <dependencies>
     <!-- compile dependencies -->
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
index 2380af770762dc381d7eeeb99bc97ab88c98a282..3f7a4594312004fa1afa9dee60e45fb139fcefb7 100644 (file)
@@ -13,7 +13,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>12.0.6</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
index c4e0b8c0389ea90c426b84687523ad83dcedc82b..e1bf3c4dd1d84247e32fbaf1a6e357fdd04e1acb 100644 (file)
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>org.codehaus.janino</groupId>
             <artifactId>janino</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
-            <artifactId>rfc6991</artifactId>
+            <artifactId>rfc6991-ietf-inet-types</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
index e1cc67b3d403e6a591778b543680dd99626d159c..969de76fccaebdab8fd21f0a8fca1f3e7468f1f0 100644 (file)
@@ -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);
index 65bb85bc8e06359d6089c5847560213ec57fffcd..e0ff1374bfd2e3c2b57eb40b53623731e574cac9 100644 (file)
@@ -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,
index 7e8c8523143ea204fcf0282a4e33481a51d562af..f475872e34f18bf57295c01ae1eeff25914a38f1 100644 (file)
@@ -98,8 +98,8 @@ public final class SchemaSourceCache<T extends SchemaSourceRepresentation> exten
     public synchronized ListenableFuture<? extends T> 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));
         }
 
index 3c6ec450963379b752b897a0192b8056d4e9481d..6407d5f711dbd78be04f8141c5d15057372cbaee 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>12.0.6</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
index c5fc37679f9124f7cf3367b00ccc046eb79b8999..1806f1c9e2e6404ed65fffa4bbb773782999629c 100644 (file)
@@ -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);
index 2f58f6c9d49bea30bdffda59659bab32032225ca..99385c9fbdf4d4d4686a7fc5c953c87dbcc17ff7 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.11</version>
+    <version>12.0.0-SNAPSHOT</version>
     <relativePath/>
   </parent>
 
       <dependency>
         <groupId>org.opendaylight.infrautils</groupId>
         <artifactId>infrautils-artifacts</artifactId>
-        <version>5.0.5</version>
+        <version>6.0.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.aaa</groupId>
         <artifactId>aaa-artifacts</artifactId>
-        <version>0.17.10</version>
+        <version>0.18.0-SNAPSHOT</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>bundle-parent</artifactId>
-        <version>7.0.8</version>
+        <version>8.0.0-SNAPSHOT</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
index d08270c9461f76e2d8cc006e2035d08cd5e87ef7..662a30581337171f10f76abeaa83506d22551ecd 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>concepts</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc7952-data-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc7952-data-util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-util</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc8528-model-api</artifactId>
index d72834d147f684122deb6b06a0f8260df455a466..1e222233d03ca8d8db8985eae30e7b7ce4ebf04f 100644 (file)
@@ -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
index e535cd4ac879583b0460c83807d70bb257b43e08..8024bfff9e4b3585b90f7c77454c52b47c0112e9 100644 (file)
@@ -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<MountPointIdentifier, NetconfMountPointContextFactory> mountPoints;
+    private final ImmutableMap<MountPointLabel, NetconfMountPointContextFactory> mountPoints;
 
     private DeviceMountPointContext(final EffectiveModelContext schemaContext,
-            final Map<MountPointIdentifier, NetconfMountPointContextFactory> mountPoints) {
+            final Map<MountPointLabel, NetconfMountPointContextFactory> 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<MountPointIdentifier, NetconfMountPointContextFactory> mountPoints = new HashMap<>();
+        final Map<MountPointLabel, NetconfMountPointContextFactory> 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<MountPointContextFactory> findMountPoint(@NonNull final MountPointIdentifier label) {
+    public Optional<MountPointContextFactory> findMountPoint(@NonNull final MountPointLabel label) {
         return Optional.ofNullable(mountPoints.get(requireNonNull(label)));
     }
 }
index afd506e2e27627f734cc304ec3c7b88076ca4c13..b275f763febe3d1d8fff5aa86232fbf32e7c1637 100644 (file)
@@ -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<NormalizedNode> 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<NormalizedNode> 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);
         }
index e142e27b42ba8791a600a9914ee6a5fa74c59b49..165261de705115698ec8dc6532da9cb90e7dc01b 100644 (file)
@@ -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<Y
                 "Unable to download remote schema for " + sourceIdentifier + " from " + url, e));
         }
 
-        final var yangSource = new CachedYangTextSchemaSource(id, sourceIdentifier, url.toString(), schemaContent);
+        final var yangSource = new CachedYangTextSchemaSource(id, sourceIdentifier, url.toString(),
+            new String(schemaContent, StandardCharsets.UTF_8));
         LOG.debug("Source {} downloaded from a yang library's url {}", sourceIdentifier, url);
         return Futures.immediateFuture(yangSource);
     }
index ed84578b51bb91a4b9de77c00728f113e04120f2..d6d6898356af48e0473ae44688f0ece4212b1b4b 100644 (file)
@@ -15,7 +15,6 @@ import static org.opendaylight.netconf.common.mdsal.NormalizedDataUtil.NETCONF_D
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 import javax.xml.transform.dom.DOMSource;
 import org.eclipse.jdt.annotation.NonNull;
@@ -110,8 +109,7 @@ public final class MonitoringSchemaSourceProvider implements SchemaSourceProvide
                             id + ": Unexpected response to get-schema, schema not present in message for: "
                                 + sourceIdentifier));
                     LOG.debug("{}: YANG Schema successfully retrieved for {}:{}", id, moduleName, revision);
-                    return new CachedYangTextSchemaSource(id, sourceIdentifier, moduleName,
-                        schemaString.getBytes(StandardCharsets.UTF_8));
+                    return new CachedYangTextSchemaSource(id, sourceIdentifier, moduleName, schemaString);
                 }
 
                 LOG.warn("{}: YANG schema was not successfully retrieved for {}. Errors: {}", id, sourceIdentifier,
index 79041302d8f375b07ff2e60d71ce8fe51fdb6a29..9cf46db79b842bb95ff042b95b0c28c31d97c1ba 100644 (file)
@@ -58,12 +58,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev230430.co
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev230430.connection.oper.unavailable.capabilities.UnavailableCapability;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev230430.connection.oper.unavailable.capabilities.UnavailableCapability.FailureReason;
 import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
-import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext;
 import org.opendaylight.yangtools.rfc8528.model.api.SchemaMountConstants;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.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.repo.api.EffectiveModelContextFactory;
@@ -272,7 +271,7 @@ public class NetconfDevice implements RemoteDevice<NetconfDeviceCommunicator> {
     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);
         }
index 6b6dff844e59410a1ba55e9f3093f609b55bf3df..4805400158bcef32a67b1220fb87a934c49d1c94 100644 (file)
@@ -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;
 
 /**
index 5494aa76996c540c085e6f3e8c429ed1e3e5901a..561484691b76f55b927fe548a932733355036cc3 100644 (file)
@@ -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<ContainerName, MountPointChild> libraryContainers,
-            final MountPointChild schemaMounts) throws YangParserException {
+            final MountPointChild schemaMounts) {
         return mountPoint;
     }
 }
index 433442a50a47c0bf3bf83da3eb16ff51bd03d7cc..eb78b1f2dccf9359df4156ec4c7f1dc718b4f681 100644 (file)
@@ -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();
index 2ae1c48a09f5d060659dc06488ecea9452bb5f88..8ac1d3e75aef15a35611fa36c30e7863229ea17d 100644 (file)
@@ -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()));
     }
 }
index 571970b6cf50985a1f3ed9255a6f453d634205cc..bc40068392adcaa7fca6c70e27fe36fb3dfea661 100644 (file)
@@ -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<QName, ? extends RpcDefinition> 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;
     }
 
index 5058cda43a53ddcee5b92a3340f8f4886492e006..29829c4e6d4884e5a59af50215abb2cfc124c175 100644 (file)
@@ -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;
index 1f7760c58b048ae67d0f4685b9fec8b9c47b7850..a34193799504d4319d0e1613271a4912d9137525 100644 (file)
@@ -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<PathArgument> args = path.getPathArguments();
-        final Deque<Builder> 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<BuilderAndArg>(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<PathArgument> 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);
             }
 
index d80b71cb43abf51884cd779dc902f0f8ca4529a0..95d05a604194a0579834bcc50adc31fd5b3e21ea 100644 (file)
@@ -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<Absolute, ActionDefinition> getActions(final EffectiveModelContext schemaContext) {
         final var builder = ImmutableMap.<Absolute, ActionDefinition>builder();
-        findAction(schemaContext, new ArrayDeque<QName>(), 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<NestedNotificationInfo> 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
index d488ef1ec9aa9945bd8244c2c7668c832b7e9347..8048f72226296ee81ac7450af93ef3e458848c94 100644 (file)
@@ -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<NormalizedNode> 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();
index 7a873c5c770d1dd987387d806f8f36c32eeebde4..a41cfd7007fc2ee1def86eb2f34b48703c8ca483 100644 (file)
@@ -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;
index 87e1ab1f95387e3b79ddf56caa1bdbbe4e576706..45a7662a6db64d86f6df646c0629f234628319d0 100644 (file)
@@ -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();
index d2d16b56906bf57efcecd6e59d3bf2c76c062e78..77d889a68d922d0b488f95f15d43985874f125e2 100644 (file)
@@ -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"));
     }
 
index f6fe3d8be38af79056d03817ccc31188dc8d6865..47926db7ed2606ab47ac7746dd5caea304d895bc 100644 (file)
@@ -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),
index fdbce052cce7d55d2116c94706fb37566cc4bf9b..09af1952b8433180668397d6871b559a918532b9 100644 (file)
@@ -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
index f20b5484ae8a009b09627c93ce2440b40c08549b..6d52e85b7632d52c098d7343ae4dafd90b1c7426 100644 (file)
@@ -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();
index 5007457fa1e39b107aa25a730a0cd76ae1c06c51..e94cd05281a8ed91686c1402e016e801e5f75169 100644 (file)
@@ -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());
     }
 
index 563b613e9074a9392dbcea8845a04df6ec11977e..ab862463bad9fec83482d696ea005107c1452ba9 100644 (file)
@@ -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
index 486d17f557d9bcea1d94b0effe409187be6cfe8d..3017d5a17f952650516b64b33cf7f5e07dc4de79 100644 (file)
@@ -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<PathArgument> 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,
index 6a9088ca7041d6310a2c87f48644fd462257cf4f..0d9b8814f06225372070a0fb3ac6655131ed3f59 100644 (file)
@@ -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());
         }
     }
index 4eb1bc6a89475f8bc94da33c9aa56cb1ca8e65ee..b61d9fa3312a5b096b0c7357cf047855fa5c9de1 100644 (file)
@@ -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);
     }
 }
index 453d5cda8b92041ed8bef9b2c2c0650f6f3a1d57..5802fe782448d69fc19c5300dd73c0f2c976bab9 100644 (file)
@@ -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);
     }
 }
index bb33c9481037500e94293ba606e1c44c3ee7cc65..7fbd3e01284271a71e91a6c2ac0c9e5633816397 100644 (file)
@@ -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(
                 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
                         + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"101\">\n"
index be94009d25fd4bd9798941db1181da3b4bbbc505..b5e050f9bc0bfd4dd43215133fbaaf831084ca71 100644 (file)
@@ -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),
index db0e11bd7460d751448f9cb16bfcd5f70d24f5ec..8a23461c50bcab61f0ebe2e3cc6cf1b340a357c5 100644 (file)
@@ -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)
index 81fe9de292211aed6efda3e2af1365b4887d66b0..80f92e527ece34784ee46536236df3c9bb304359 100644 (file)
@@ -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 {
index f1eb5ff1c16e88d729bcfa841be334d0b9eb6749..d3be06e948b7debdcca1edef97d9ec5f737dbf08 100644 (file)
@@ -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));
     }
 
index 50b72bb7283534a29ec5bc52216129db5a074417..71fadb8d2228d60abcc152b13931bd88e0c5807e 100644 (file)
@@ -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
index ff7102856aa4cfd272813d48c9b7c46423ae2add..160dd0957982952714b4b0c87c4cddc8fbcddca0 100644 (file)
@@ -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
index fb3225216f50d3f8e35280370d696b8dc672ff2b..04540bbb6f6e7ceaa75100b6e8e99a98e340f73b 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-data-util</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc7952-data-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc7952-data-util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-util</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-data-impl</artifactId>
index 5caf707ac387a2aac0aef313cef05b427b70c196..04179ada81e0e5b96c8fb391bdb446f378d592f1 100644 (file)
@@ -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<NormalizedMetadata> 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);
index d302a93ec01dc95bf90f35661918a18aee2d080b..56d8b24ff1fdc6610688a8ddd8b4a7464a827d33 100644 (file)
@@ -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<PathArgument> 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);
     }
 }
index b67d7ac572837c30365b88e2057a31e19a80eb15..e41231ba7781b88cdba7809c2675141dfe8d3b39 100644 (file)
@@ -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<MountPointContext>, Moun
     }
 
     @Override
-    public Optional<MountPointContextFactory> findMountPoint(final MountPointIdentifier label) {
+    public Optional<MountPointContextFactory> findMountPoint(final MountPointLabel label) {
         return delegate.findMountPoint(label);
     }
 }
index 8b6889a824d718c1ed734c1fd7c846b161720f6b..050b967a3dbf7e2b046629f0f9e0e7d513d82c69 100644 (file)
@@ -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<T extends PathArgument> implements Identifiable<T> {
     private final T identifier;
@@ -58,17 +53,7 @@ abstract class StreamingContext<T extends PathArgument> 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<T extends PathArgument> 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<T extends PathArgument> implements Identifiable<
         }
     }
 
-    private static final class Augmentation extends AbstractDataContainer<AugmentationIdentifier> {
-        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);
index 26a619efacaf4a988bf1111e6aeab72d5f6e79fd..6e651c031ca8f9e51e9d29052ae91118c01efc45 100644 (file)
     <packaging>bundle</packaging>
 
     <dependencies>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
index 746f9705175d59c4a6777faf9aa3ace70ea693e6..7784004be29768410e29e2f037994d8599d728fb 100644 (file)
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>yang-common</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.yangtools</groupId>
-      <artifactId>rfc7952-data-api</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>yang-data-api</artifactId>
index dba9d8a1e13a160b60367aaeb0c61a0faf1eaeb2..3649430d242f6652fecbb91fb21d82131606fb13 100644 (file)
@@ -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));
         }
index 67eb5f7a4f63e3ec1ce8e53464a63051b2c37431..749f710b733e869c5ec8cdcc007452c55ca52b32 100644 (file)
@@ -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);
     }
 
index c1aeaad34bc3e935791b99e5e052f0517ea66869..b56535e6d9a6297fa17b8ab79de5a7ed8c9d98a2 100644 (file)
@@ -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 <config> 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);
index 71912537e0bfab6843c7cd915caeb49464924573..88735932768b26f88a3a562d420660f5d00f6213 100644 (file)
@@ -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());
         }
     }
 
index e4dc20071230494616df97c8367a4868faae4cd8..0cfcc55b9503ab99a99fa4dd0ca23f9c33320c5a 100644 (file)
@@ -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();
     }
 }
index 14c0129dc6d772ae93c2d9d5a40a7fe466ff30c4..3351b3ea7b47cc58bb324bd7d9aae075f3912a88 100644 (file)
@@ -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<DataTreeChange> dataTreeChanges = new ArrayList<>();
     // Path of the node we are currently in
@@ -73,8 +69,8 @@ final class SplittingNormalizedNodeMetadataStreamWriter implements NormalizedNod
     }
 
     @Override
-    public ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
-        return ImmutableClassToInstanceMap.of(StreamWriterMetadataExtension.class, this);
+    public Collection<? extends Extension> 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));
         }
     }
 
index f9898c5adc1c66babe5c96babaa0abb921c47993..44a96cf8f7eb4f4cbd8434db88a268fbab8aa3c7 100644 (file)
@@ -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<LogicalDatastoreType, DOMStore> datastores = new EnumMap<>(LogicalDatastoreType.class);
+        final var datastores = new EnumMap<LogicalDatastoreType, DOMStore>(LogicalDatastoreType.class);
         datastores.put(LogicalDatastoreType.CONFIGURATION, configStore);
         datastores.put(LogicalDatastoreType.OPERATIONAL, operStore);
 
index 6bbbad1c81ce3e8600da4624cd7a5cae6533a1c6..5adb7198f49f55f4cc81bdfcadd500e1661c8091 100644 (file)
@@ -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);
     }
index 4eaf5d2bab1252d0c288153d2bf2faf5ad328986..c0df66ca050599021b8e1a64109eb0477b28e057 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
diff --git a/pom.xml b/pom.xml
index 6d310206ccf7591f79989cc2107cb964d9560ffd..50727196f68ecfa806e7786291dd917363b2e729 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 9218998fd7646154da0aaf637128907508adc487..b4e4138f182f797d9229e0b811aa21ff894b4772 100644 (file)
   <packaging>bundle</packaging>
 
   <dependencies>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
index 05767ea1beee5dedbca7f36d7e717b148d726c1b..b2fbfc64e7e603f6558eeaa93a14924009cac44f 100644 (file)
   <packaging>bundle</packaging>
 
   <dependencies>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
index 355fefae963832fe91800bc2d809689d5f0405d2..5a1e05bf38f06f024cad59e8f65bd99108c0695c 100644 (file)
     <name>${project.artifactId}</name>
 
     <dependencies>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.netconf</groupId>
             <artifactId>netconf-api</artifactId>
index df3f4664977545c20df2ce70b75ebe598edb336a..37e26232d5dd4f1825617fd918b0d41876d31acc 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index d20662ca8bf066b48aa5ad4acfdb2cd4c99a1c93..fd5261013020a90a10ffb8ea728d70b1bdd2eca7 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 81577a0caa168f237a9953e29af87fc97fd77230..2d0fbbe896be69c052def5bbb6d4e16c18f444f5 100644 (file)
@@ -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<PathArgument> 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<PathArgument> concatArgs) {
-            final var newInstanceIdentifier = YangInstanceIdentifier.create(
+            final var newInstanceIdentifier = YangInstanceIdentifier.of(
                 Iterables.concat(path.getPathArguments(), concatArgs));
             return new DataPath(getSchemaNode(), getMountPoint(), stack, newInstanceIdentifier);
         }
index 0ada87728b649b16cbf706f4ff5a69b0db00700e..799277255818c3adaef742f3feb185d45c1a5f99 100644 (file)
   <packaging>bundle</packaging>
 
   <dependencies>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>yang-data-impl</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.yangtools</groupId>
-      <artifactId>rfc8528-data-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.yangtools</groupId>
-      <artifactId>rfc8528-data-util</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>yang-model-api</artifactId>
index 6ed4fcc5d92bdabde62e9dc28be3bf15d9e8e5f5..8faf5f09d7f7f9a150ee8341b2a12bc48807b890 100644 (file)
@@ -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) {
index 66962650a569127ea270ca9e30f3ad73c7dd1c5a..c443fda24959b78bf957b8a4e2c1a7891cc8771b 100644 (file)
@@ -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<YangInstanceIdentifier.PathArgument> 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());
             }
index 36c9daa12ac91e2cf5c478f1286f4f391d1efb34..62b65c4743a11713f05ec249a1aa4642a432f41a 100644 (file)
@@ -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<QName> qnames = node.getIdentifier().keySet();
+            final Set<QName> 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;
                         }
 
index 49a5498c48ddfd4733967750c3421f2d662e054f..4b613bed458cfc54c9ca2b1a9343b31bce6e0185 100644 (file)
@@ -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());
index ca1e26742ba5575172b4053a495d698de7f3674f..1563793055f370070e30155a479b368bc85844b1 100644 (file)
@@ -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);
     }
 }
index 2522cc1504958835a28e968c5f27a841a2d82a9c..e484063709784d47cbfaac6c3542581225c7b8a0 100644 (file)
@@ -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();
     }
 
     /**
index 0e9fd3703ba442b721746f913a8704c9027b07d0..a43f1bfbde93e7406abf27b01d9ba10ca01f4be6 100644 (file)
@@ -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));
index c5e7757fcfdcc4fdd5b5e69008f73081d1dbe3f6..778a94f98d8352468ab08c58121ba43ad17308f6 100644 (file)
@@ -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;
     }
 
     /**
index e8b28f32521fd0866b34bc10381e30f6f9b6a088..d77f1fd6e1e47a62ca1bf7f325fd9a20fd3b3484 100644 (file)
@@ -110,15 +110,15 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat
         Futures.addCallback(future, new FutureCallback<DOMRpcResult>() {
             @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));
index 0056e7b80ddd4ccf5a1a667ca5f85fb0833bff6e..308f22ce8f9e64fa76ffbf5eba8ca22bacb3beed 100644 (file)
@@ -127,7 +127,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction {
         Futures.addCallback(resultErrors, new FutureCallback<>() {
             @Override
             public void onSuccess(final DOMRpcResult result) {
-                final Collection<? extends RpcError> errors = result.getErrors();
+                final Collection<? extends RpcError> 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<DOMRpcResult>() {
                     @Override
                     public void onSuccess(final DOMRpcResult rpcResult) {
-                        final Collection<? extends RpcError> errors = rpcResult.getErrors();
+                        final Collection<? extends RpcError> 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<DOMRpcResult> 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.<RpcError>builder();
             for (ListenableFuture<? extends DOMRpcResult> 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<DOMRpcResult>() {
             @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(",")));
                 }
             }
 
index ce510e3b7fd0c0e67c7e2ed7f38c15bd6daa5891..546098b74822d1f39afdbfaacfff43b441cb60cd 100644 (file)
@@ -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()) {
index 596bd343099b208349b68482b4f906cd0889ba67..d332412d233a8bc22774a9288b3b5cd2beb3bf06 100644 (file)
@@ -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<NodeIdentifierWithPredicates, MapEntryNode> builder,
-            final Collection<@NonNull DataContainerChild> children, final DataSchemaContextNode<?> ctxNode,
+            final Collection<@NonNull DataContainerChild> children, final DataSchemaContext ctxNode,
             final boolean trim, final List<QName> 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<QName> keys) {
-        if (!(ctxNode.getDataSchemaNode() instanceof LeafSchemaNode leafSchema)) {
+            final DataSchemaContext ctxNode, final boolean trim, final List<QName> 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<MapEntryNode, ? extends MapNode> 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<NodeIdentifier, ContainerNode> builder,
-            final Collection<DataContainerChild> children, final DataSchemaContextNode<?> ctxNode, final boolean trim) {
+            final Collection<DataContainerChild> 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<AugmentationIdentifier, AugmentationNode> 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<NodeIdentifier, ChoiceNode> builder = Builders
index 92c7ecfbf16c5a918cef5b0c9b08d447c87190df..32ff1adc6cbef212048122dcb79f5540909ec608 100644 (file)
@@ -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<T extends Exception> {
 
     final boolean serializeLeafNodesOnly(final Deque<PathArgument> 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<T extends Exception> {
             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<DataTreeCandidateNode>();
         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<PathArgument> 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<PathArgument> 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<T extends Exception> {
         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(':');
index 34bcf3ebbe65bfad6e36bcbeae15a8976785a68b..8bd42f81462d1fbddfa48dd736c9c3fd5f78b0c8 100644 (file)
@@ -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
index 92f7ebc704b7624da172f50ae72eeae02c564486..ab1b9a264a7810f9db5ecccb4ac15d3855338024 100644 (file)
@@ -59,7 +59,7 @@ final class XmlDataTreeCandidateSerializer extends AbstractWebsocketSerializer<E
     @Override
     public void serializeOperation(final DataTreeCandidateNode candidate) throws XMLStreamException {
         xmlWriter.writeStartElement("operation");
-        xmlWriter.writeCharacters(modificationTypeToOperation(candidate, candidate.getModificationType()));
+        xmlWriter.writeCharacters(modificationTypeToOperation(candidate, candidate.modificationType()));
         xmlWriter.writeEndElement();
     }
 }
index 3a9333552b43faf83b29ba48c8a9f11a48d8c7f3..ab2543030e41abc67e83d7803b02b87d5b4005f6 100644 (file)
@@ -22,13 +22,17 @@ import org.opendaylight.restconf.api.query.FieldsParam;
 import org.opendaylight.restconf.api.query.FieldsParam.NodeSelector;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.yangtools.yang.common.Empty;
 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.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.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
@@ -54,8 +58,8 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
  */
 public final class NetconfFieldsTranslator {
     /**
-     * {@link DataSchemaContextNode} of data element grouped with identifiers of leading mixin nodes and previous
-     * path element.<br>
+     * {@link DataSchemaContext} of data element grouped with identifiers of leading mixin nodes and previous path
+     * element.<br>
      *  - identifiers of mixin nodes on the path to the target node - required for construction of full valid
      *    DOM paths,<br>
      *  - {@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<PathArgument> mixinNodesToTarget,
-            @NonNull DataSchemaContextNode<?> targetNode) {
+            @NonNull DataSchemaContext targetNode) {
         LinkedPathElement {
             requireNonNull(mixinNodesToTarget);
             requireNonNull(targetNode);
@@ -96,10 +100,12 @@ public final class NetconfFieldsTranslator {
 
     private static @NonNull Set<LinkedPathElement> 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<LinkedPathElement>();
@@ -143,54 +149,74 @@ public final class NetconfFieldsTranslator {
             final QName childQName) {
         final var collectedMixinNodes = new ArrayList<PathArgument>();
 
-        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<PathArgument>();
         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;
     }
index 6931ca28f4a246b384e20576e54acf983e3964c5..dd060be4d6d98d52cd37728f0d0a5ae9b7323833 100644 (file)
@@ -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<Set<QName>> 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<Set<QName>> parsed, final EffectiveModelContext context,
-            final QNameModule startNamespace, final DataSchemaContextNode<?> startNode,
-            final List<NodeSelector> selectors, final int index) {
+            final QNameModule startNamespace, final DataSchemaContext startNode, final List<NodeSelector> selectors,
+            final int index) {
         final Set<QName> 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<QName> level) {
+    private static DataSchemaContext addChildToResult(final DataSchemaContext currentNode, final QName childQName,
+            final Set<QName> 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<QName> 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;
index a9b427c1bc1e08b0881b008a65114e3f529d1aa2..29a79571f9742b40b0eade3360baa8eb10f8ad7a 100644 (file)
@@ -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<PathArgument>();
         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;
             }
 
index 7f429cc22bf0cc0f5f4e24333ba9ebc36a11ea42..68f912ee59706bd5e35453a6770e3ead11419b3f 100644 (file)
@@ -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;
         }
-
     }
 }
index 22ad94bd09c0a520583292ef7997f9e3bdf7fdbd..d3c691c90aebb93dfe0c290597291bfebe07d06e 100644 (file)
@@ -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;
index 230b194cdb9ac46c264dc4f8099578adcf57a4c5..b4afc7339596eb9a9d6ac4f6f474b8f59391f766 100644 (file)
@@ -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()));
     }
 
index 6a397ec752939557a8be0ef59721cfa7ffbc4af5..2aec2af83b633ac4d6046fdf0512f25b4277d7a0 100644 (file)
@@ -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,
index 62c2b215a529e3f5367b4664d9683032cf49ae53..d3e3763902e8766daf9cf9d3aa0871b6c1a8a66a 100644 (file)
@@ -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";
index b5bc8c7ae89d0c7dd4cb1ed92bdf5eabdbd641e1..21ba3ac595b0c8113932715215d26c50ed3aa279 100644 (file)
@@ -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,
index 034a026bd56507335f88fe0e54c8486bb845fe7f..948e2475f27a5e9a580086da66eef819784eecf7 100644 (file)
@@ -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();
index c83bbdb57e68fdb19477c92d2ef2f469d4f2ae89..35249dfbb904593839006e522b3ac72ad41381ec 100644 (file)
@@ -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<? extends RpcError> errorList = rpcResult.getErrors();
+        assertNull(rpcResult.value());
+        final Collection<? extends RpcError> 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);
     }
index 776045211382d0a092b62a67cda870bdea428a9f..1d410873f70664c484ced22952045583f741bbfb 100644 (file)
@@ -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<String> 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<String> leaf) {
-        final AugmentationNode augm = mock(AugmentationNode.class);
-        final AugmentationIdentifier augmId = new AugmentationIdentifier(Set.of(leaf.getIdentifier().getNodeType()));
-        when(augm.getIdentifier()).thenReturn(augmId);
-
-        final Collection<DataContainerChild> childs = new ArrayList<>();
-        childs.add(leaf);
-
-        when(augm.body()).thenReturn(childs);
-        return augm;
-    }
-
     private static MapEntryNode mockMapEntry(final QName entryQName, final LeafNode<String> 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();
     }
index 2fe629e0960863535c618f8601d1bfb6ae58e900..6b96aca63d0c5a7fc8b7fdee3a122d317dac3d5b 100644 (file)
@@ -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<String> 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<String> leaf) {
-        final AugmentationNode augm = mock(AugmentationNode.class);
-        final AugmentationIdentifier augmId = new AugmentationIdentifier(Set.of(leaf.getIdentifier().getNodeType()));
-        when(augm.getIdentifier()).thenReturn(augmId);
-
-        final Collection<DataContainerChild> childs = new ArrayList<>();
-        childs.add(leaf);
-
-        when(augm.body()).thenReturn(childs);
-        return augm;
-    }
-
     private static MapEntryNode mockMapEntry(final QName entryQName, final LeafNode<String> 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();
     }
index 9f61e45443bb358d340a0c0ec45073c052e27991..f7a8feead5a5219bf98667fcab5ac48c4d0e952b 100644 (file)
@@ -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<Ya
     }
 
     @Override
-    protected void assertKeyedList(List<YangInstanceIdentifier> result) {
+    protected void assertKeyedList(final List<YangInstanceIdentifier> result) {
         assertEquals(1, result.size());
     }
 
@@ -90,7 +87,7 @@ public class NetconfFieldsTranslatorTest extends AbstractFieldsTranslatorTest<Ya
     protected void assertNamespace(final List<YangInstanceIdentifier> 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<Ya
         assertEquals(1, result.size());
         final var pathArguments = result.get(0).getPathArguments();
 
-        assertEquals(3, pathArguments.size());
+        assertEquals(2, pathArguments.size());
         assertEquals(PLAYER_Q_NAME, pathArguments.get(0).getNodeType());
-        assertThat(pathArguments.get(1), instanceOf(AugmentationIdentifier.class));
-        assertEquals(SPEED_Q_NAME, pathArguments.get(2).getNodeType());
+        assertEquals(SPEED_Q_NAME, pathArguments.get(1).getNodeType());
     }
 
     @Override
index fd4f6a67ffcbaacc02df47a6194203fce80b80cd..495c4a9a8c4b09b360b3b9a9a6b8c2b18676e51d 100644 (file)
@@ -73,8 +73,7 @@ public class ParserIdentifierTest {
             "/(parser:identifier:included?revision=2016-06-02)list-1/list-1"
             + "[{(parser:identifier:included?revision=2016-06-02)name=name, "
             + "(parser:identifier:included?revision=2016-06-02)revision=2016-06-02}]"
-            + "/AugmentationIdentifier{childNames=[(parser:identifier?revision=2016-06-02)augment-leaf]}/"
-            + "(parser:identifier?revision=2016-06-02)augment-leaf";
+            + "/(parser:identifier?revision=2016-06-02)augment-leaf";
 
     // invalid test identifier
     private static final String INVALID_TEST_IDENT =
index a8e0b4339cad460a3ca7932652e64cc5d3331317..815f01b4ac7bc8b38d0fca89507ebf2ad2ec7cb4 100644 (file)
@@ -32,7 +32,6 @@ import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint8;
 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;
@@ -621,7 +620,7 @@ public class YangInstanceIdentifierDeserializerTest {
         final List<PathArgument> 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<PathArgument> 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));
     }
 
     /**
index 7fcb0f42a2ac7ca1198240ab5204d873ef58258e..f9d62a4ea23dfbd2f148d5f4cb1bda5acef8dbdc 100644 (file)
@@ -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();
 
index aff6471ebd677399dcfcebbadb86e2fdbc71382b..522acbce34f6996991a236af46cdeaab43da812b 100644 (file)
             <operation>created</operation>
         </data-change-event>
         <data-change-event>
-            <path>
-                /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1
-            </path>
+            <path>/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1</path>
             <data>
-                <case-leaf1 xmlns="augment:instance:identifier:patch:module">ChoiceLeaf</case-leaf1>
+                <leaf1 xmlns="augment:instance:identifier:patch:module">AugmentLeaf</leaf1>
             </data>
             <operation>created</operation>
         </data-change-event>
         <data-change-event>
-            <path>/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1</path>
+            <path>
+                /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1
+            </path>
             <data>
-                <leaf1 xmlns="augment:instance:identifier:patch:module">AugmentLeaf</leaf1>
+                <case-leaf1 xmlns="augment:instance:identifier:patch:module">ChoiceLeaf</case-leaf1>
             </data>
             <operation>created</operation>
         </data-change-event>
     </data-changed-notification>
-</notification>
\ No newline at end of file
+</notification>
index 19b3bf61eb1090c605c0bb0169144e71cc752761..684e28fba3b43e3c48bde97f6416d74c49cbee68 100644 (file)
             <operation>created</operation>
         </data-change-event>
         <data-change-event>
-            <path>
-                /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1
-            </path>
+            <path>/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1</path>
             <data>
-                <case-leaf1 xmlns="augment:instance:identifier:patch:module">ChoiceUpdate</case-leaf1>
+                <leaf1 xmlns="augment:instance:identifier:patch:module">AugmentLeaf</leaf1>
             </data>
             <operation>updated</operation>
         </data-change-event>
         <data-change-event>
-            <path>/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1</path>
+            <path>
+                /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1
+            </path>
             <data>
-                <leaf1 xmlns="augment:instance:identifier:patch:module">AugmentLeaf</leaf1>
+                <case-leaf1 xmlns="augment:instance:identifier:patch:module">ChoiceUpdate</case-leaf1>
             </data>
             <operation>updated</operation>
         </data-change-event>
     </data-changed-notification>
-</notification>
\ No newline at end of file
+</notification>
index 4469e334102eff6ed87b1818c322d07078c682e2..09f64395e662e54d1ad923ed7d46dd654acd92ac 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>12.0.6</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
index ffa30359c37c5248b7ba0f000215205893b22ec4..338c549924a502995354be74d303f796e5f15806 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index eee4321459f2adb0d201db30f118a418d17827c8..a5ede6df85b3a9dc2c4c5960f7c3435b72217d8b 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index b5fe9ba665782e295733dec0ef1d0b7a50a8335d..6a17158739d603ad06d795c5fef3826db94b66d7 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>bundle-parent</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 8f8092d8300f75f7c002a7f2ff4d47bda063f4dc..3646230c7a01ee26f5c4ee04f725ffe2b9a852ae 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 4593d47c47dc7ef8f3b3569668f2177a4202f3c6..f48cedcbb5e9fec46bb3909b0186a261df871fb6 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>bundle-parent</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 88b5e809ddaaab9cc6b7e19bee709f988a7a7d28..5a0b744aaed5ed9fee042e07a5cd0be5de387423 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>
 
index 43178c84d1ae8dfbb19fcc8a95a09033c9148df2..f31fa26817433bf9a24ccc345b73f1edd7e72551 100644 (file)
@@ -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();
 
index 1bf28ba3c56fa981f1f1b40e4531c5a7666255c9..a77983b959e223349bcbd3ddf9224a4d92b91bd0 100644 (file)
@@ -36,6 +36,6 @@ public abstract sealed class TCPTransportStack extends AbstractTransportStack<TC
         if (addr == null) {
             return port == null ? null : new InetSocketAddress(portNum);
         }
-        return new InetSocketAddress(IetfInetUtil.INSTANCE.inetAddressFor(addr), portNum);
+        return new InetSocketAddress(IetfInetUtil.inetAddressFor(addr), portNum);
     }
 }
index 8ba5a88482314fb34acc372ea48277d8c35d26f6..8e970ee34c0ddd663b8edbc4ae5302fa59541ae3 100644 (file)
@@ -68,7 +68,7 @@ public class TCPClientServerTest {
     @Test
     public void integrationTest() throws Exception {
         // localhost address, so we do not leak things around
-        final var loopbackAddr = IetfInetUtil.INSTANCE.ipAddressFor(InetAddress.getLoopbackAddress());
+        final var loopbackAddr = IetfInetUtil.ipAddressFor(InetAddress.getLoopbackAddress());
 
         // Server-side config
         doReturn(loopbackAddr).when(serverGrouping).getLocalAddress();
index 87b752b87a995fa5c24280bc85a4ff68f42fb7cd..a4406c21072951b167674fc430fe40aabc575b4b 100644 (file)
@@ -99,7 +99,7 @@ class TlsClientServerTest {
 
         // 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();
 
index 5504c200cc7d90fae44e0ceee024924ece042263..9a853e0215ea7f91bb694f3126caaf5b19a90bd4 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>12.0.6</version>
+        <version>13.0.1</version>
         <relativePath/>
     </parent>