OpenApi add POST request to device root
[netconf.git] / plugins / netconf-client-mdsal / src / main / java / org / opendaylight / netconf / client / mdsal / SchemalessNetconfDevice.java
index 33c5ccc7c7b0c31db4a97c0b0d819d1c10d47237..2347c4ed5b4c60611df7a8937552fb187f2e2cf1 100644 (file)
@@ -9,9 +9,8 @@ package org.opendaylight.netconf.client.mdsal;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.VisibleForTesting;
 import org.opendaylight.netconf.api.messages.NetconfMessage;
-import org.opendaylight.netconf.client.mdsal.api.BaseNetconfSchemas;
+import org.opendaylight.netconf.client.mdsal.api.BaseNetconfSchemaProvider;
 import org.opendaylight.netconf.client.mdsal.api.NetconfSessionPreferences;
 import org.opendaylight.netconf.client.mdsal.api.RemoteDevice;
 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceHandler;
@@ -23,48 +22,41 @@ import org.opendaylight.netconf.client.mdsal.impl.SchemalessMessageTransformer;
 import org.opendaylight.netconf.client.mdsal.spi.SchemalessNetconfDeviceRpc;
 
 public class SchemalessNetconfDevice implements RemoteDevice<NetconfDeviceCommunicator> {
-    private final BaseNetconfSchemas baseSchemas;
+    private final BaseNetconfSchemaProvider baseSchemas;
     private final RemoteDeviceId id;
     private final RemoteDeviceHandler salFacade;
-    private final SchemalessMessageTransformer messageTransformer;
-    private final BaseRpcSchemalessTransformer rpcTransformer;
 
-    public SchemalessNetconfDevice(final BaseNetconfSchemas baseSchemas, final RemoteDeviceId id,
-            final RemoteDeviceHandler salFacade) {
-        this.baseSchemas = requireNonNull(baseSchemas);
-        this.id = id;
-        this.salFacade = salFacade;
-        final MessageCounter counter = new MessageCounter();
-        rpcTransformer = new BaseRpcSchemalessTransformer(baseSchemas, counter);
-        messageTransformer = new SchemalessMessageTransformer(counter);
-    }
+    private SchemalessMessageTransformer messageTransformer;
 
-    @VisibleForTesting
-    SchemalessNetconfDevice(final BaseNetconfSchemas baseSchemas, final RemoteDeviceId id,
-            final RemoteDeviceHandler salFacade, final SchemalessMessageTransformer messageTransformer) {
+    public SchemalessNetconfDevice(final BaseNetconfSchemaProvider baseSchemas, final RemoteDeviceId id,
+            final RemoteDeviceHandler salFacade) {
         this.baseSchemas = requireNonNull(baseSchemas);
-        this.id = id;
-        this.salFacade = salFacade;
-        final MessageCounter counter = new MessageCounter();
-        rpcTransformer = new BaseRpcSchemalessTransformer(baseSchemas, counter);
-        this.messageTransformer = messageTransformer;
+        this.id = requireNonNull(id);
+        this.salFacade = requireNonNull(salFacade);
     }
 
     @Override
     public void onRemoteSessionUp(final NetconfSessionPreferences remoteSessionCapabilities,
             final NetconfDeviceCommunicator netconfDeviceCommunicator) {
+        final var baseSchema = baseSchemas.baseSchemaForCapabilities(remoteSessionCapabilities);
+        final var mountContext = baseSchema.mountPointContext();
+
+        final var counter = new MessageCounter();
+        final var rpcTransformer = new BaseRpcSchemalessTransformer(baseSchema, counter);
+        messageTransformer = new SchemalessMessageTransformer(counter);
+
         salFacade.onDeviceConnected(
             // FIXME: or bound from base schema rather?
-            new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(),
-            baseSchemas.getBaseSchema().getMountPointContext()),
-            remoteSessionCapabilities, new RemoteDeviceServices(
-                new SchemalessNetconfDeviceRpc(id,netconfDeviceCommunicator, rpcTransformer, messageTransformer),
+            new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), mountContext), remoteSessionCapabilities,
+            new RemoteDeviceServices(
+                new SchemalessNetconfDeviceRpc(id, netconfDeviceCommunicator, rpcTransformer, messageTransformer),
                 null));
     }
 
     @Override
     public void onRemoteSessionDown() {
         salFacade.onDeviceDisconnected();
+        messageTransformer = null;
     }
 
     @Override