Add session-id to the operational datastore
[netconf.git] / plugins / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / netconf / listener / NetconfSessionPreferences.java
index 32aa0a3a68e5344b6b4a50636f96a29f3ecf9be7..ff29a186867278a5cc39bf2f56a29ce3a0b750b7 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.netconf.client.NetconfClientSession;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.available.capabilities.AvailableCapability.CapabilityOrigin;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,7 +34,8 @@ import org.slf4j.LoggerFactory;
 // FIXME: propagate to API with immutable semantics
 public record NetconfSessionPreferences(
         @NonNull ImmutableMap<String, CapabilityOrigin> nonModuleCaps,
-        @NonNull ImmutableMap<QName, CapabilityOrigin> moduleBasedCaps) {
+        @NonNull ImmutableMap<QName, CapabilityOrigin> moduleBasedCaps,
+        @Nullable Uint32 sessionId) {
     private static final Logger LOG = LoggerFactory.getLogger(NetconfSessionPreferences.class);
     private static final ParameterMatcher MODULE_PARAM = new ParameterMatcher("module=");
     private static final ParameterMatcher REVISION_PARAM = new ParameterMatcher("revision=");
@@ -46,17 +48,17 @@ public record NetconfSessionPreferences(
     }
 
     public static @NonNull NetconfSessionPreferences fromNetconfSession(final NetconfClientSession session) {
-        return fromStrings(session.getServerCapabilities());
+        return fromStrings(session.getServerCapabilities(), CapabilityOrigin.DeviceAdvertised,
+            Uint32.valueOf(session.getSessionId()));
     }
 
     @VisibleForTesting
     public static @NonNull NetconfSessionPreferences fromStrings(final Collection<String> capabilities) {
-        // we do not know origin of capabilities from only Strings, so we set it to default value
-        return fromStrings(capabilities, CapabilityOrigin.DeviceAdvertised);
+        return fromStrings(capabilities, CapabilityOrigin.DeviceAdvertised, null);
     }
 
     public static @NonNull NetconfSessionPreferences fromStrings(final Collection<String> capabilities,
-            final CapabilityOrigin capabilityOrigin) {
+            final CapabilityOrigin capabilityOrigin, final Uint32 sessionId) {
         final var moduleBasedCaps = new HashMap<QName, CapabilityOrigin>();
         final var nonModuleCaps = new HashMap<String, CapabilityOrigin>();
 
@@ -104,7 +106,8 @@ public record NetconfSessionPreferences(
                     cachedQName(namespace, moduleName), capabilityOrigin);
         }
 
-        return new NetconfSessionPreferences(ImmutableMap.copyOf(nonModuleCaps), ImmutableMap.copyOf(moduleBasedCaps));
+        return new NetconfSessionPreferences(ImmutableMap.copyOf(nonModuleCaps), ImmutableMap.copyOf(moduleBasedCaps),
+                sessionId);
     }
 
     public @Nullable CapabilityOrigin capabilityOrigin(final QName capability) {
@@ -180,7 +183,8 @@ public record NetconfSessionPreferences(
                 + netconfSessionModuleCapabilities.moduleBasedCaps.size());
         mergedCaps.putAll(moduleBasedCaps);
         mergedCaps.putAll(netconfSessionModuleCapabilities.moduleBasedCaps);
-        return new NetconfSessionPreferences(nonModuleCaps, ImmutableMap.copyOf(mergedCaps));
+        return new NetconfSessionPreferences(nonModuleCaps, ImmutableMap.copyOf(mergedCaps),
+                netconfSessionModuleCapabilities.sessionId());
     }
 
     /**
@@ -190,11 +194,12 @@ public record NetconfSessionPreferences(
      * @return new instance of preferences with replaced module-based capabilities
      */
     public NetconfSessionPreferences replaceModuleCaps(final NetconfSessionPreferences netconfSessionPreferences) {
-        return new NetconfSessionPreferences(nonModuleCaps, netconfSessionPreferences.moduleBasedCaps);
+        return new NetconfSessionPreferences(nonModuleCaps, netconfSessionPreferences.moduleBasedCaps,
+                netconfSessionPreferences.sessionId());
     }
 
     public NetconfSessionPreferences replaceModuleCaps(final Map<QName, CapabilityOrigin> newModuleBasedCaps) {
-        return new NetconfSessionPreferences(nonModuleCaps, ImmutableMap.copyOf(newModuleBasedCaps));
+        return new NetconfSessionPreferences(nonModuleCaps, ImmutableMap.copyOf(newModuleBasedCaps), sessionId());
     }
 
     /**
@@ -209,7 +214,8 @@ public record NetconfSessionPreferences(
                 nonModuleCaps.size() + netconfSessionNonModuleCapabilities.nonModuleCaps.size());
         mergedCaps.putAll(nonModuleCaps);
         mergedCaps.putAll(netconfSessionNonModuleCapabilities.nonModuleCaps);
-        return new NetconfSessionPreferences(ImmutableMap.copyOf(mergedCaps), moduleBasedCaps);
+        return new NetconfSessionPreferences(ImmutableMap.copyOf(mergedCaps), moduleBasedCaps,
+                netconfSessionNonModuleCapabilities.sessionId());
     }
 
     /**
@@ -219,7 +225,8 @@ public record NetconfSessionPreferences(
      * @return new instance of preferences with replaced non-module based capabilities
      */
     public NetconfSessionPreferences replaceNonModuleCaps(final NetconfSessionPreferences netconfSessionPreferences) {
-        return new NetconfSessionPreferences(netconfSessionPreferences.nonModuleCaps, moduleBasedCaps);
+        return new NetconfSessionPreferences(netconfSessionPreferences.nonModuleCaps, moduleBasedCaps,
+                netconfSessionPreferences.sessionId());
     }
 
     private static QName cachedQName(final String namespace, final String revision, final String moduleName) {