Allow SshClient to be customized via NetconfClientConfiguration
[netconf.git] / netconf / netconf-client / src / main / java / org / opendaylight / netconf / client / conf / NetconfClientConfigurationBuilder.java
index d1f2b42d4ec51e5247ebfe25affe5fbe6085898a..91013153797a4eb7893b46a55e261ddcbd51e3ca 100644 (file)
@@ -8,15 +8,20 @@
 package org.opendaylight.netconf.client.conf;
 
 import java.net.InetSocketAddress;
+import java.util.List;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
 import org.opendaylight.netconf.client.NetconfClientSessionListener;
+import org.opendaylight.netconf.client.SslHandlerFactory;
+import org.opendaylight.netconf.nettyutil.ReconnectStrategy;
 import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.AuthenticationHandler;
-import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.netconf.nettyutil.handler.ssh.client.NetconfSshClient;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 
 public class NetconfClientConfigurationBuilder {
 
     public static final int DEFAULT_CONNECTION_TIMEOUT_MILLIS = 5000;
-    public static final NetconfClientConfiguration.NetconfClientProtocol DEFAULT_CLIENT_PROTOCOL = NetconfClientConfiguration.NetconfClientProtocol.TCP;
+    public static final NetconfClientConfiguration.NetconfClientProtocol DEFAULT_CLIENT_PROTOCOL =
+            NetconfClientConfiguration.NetconfClientProtocol.TCP;
 
     private InetSocketAddress address;
     private long connectionTimeoutMillis = DEFAULT_CONNECTION_TIMEOUT_MILLIS;
@@ -25,6 +30,10 @@ public class NetconfClientConfigurationBuilder {
     private ReconnectStrategy reconnectStrategy;
     private AuthenticationHandler authHandler;
     private NetconfClientConfiguration.NetconfClientProtocol clientProtocol = DEFAULT_CLIENT_PROTOCOL;
+    private SslHandlerFactory sslHandlerFactory;
+    private NetconfSshClient sshClient;
+    private List<Uri> odlHelloCapabilities;
+
 
     protected NetconfClientConfigurationBuilder() {
     }
@@ -33,41 +42,68 @@ public class NetconfClientConfigurationBuilder {
         return new NetconfClientConfigurationBuilder();
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withAddress(final InetSocketAddress address) {
         this.address = address;
         return this;
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withConnectionTimeoutMillis(final long connectionTimeoutMillis) {
         this.connectionTimeoutMillis = connectionTimeoutMillis;
         return this;
     }
 
-    public NetconfClientConfigurationBuilder withProtocol(final NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withProtocol(
+            final NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
         this.clientProtocol = clientProtocol;
         return this;
     }
 
-    public NetconfClientConfigurationBuilder withAdditionalHeader(final NetconfHelloMessageAdditionalHeader additionalHeader) {
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withAdditionalHeader(
+            final NetconfHelloMessageAdditionalHeader additionalHeader) {
         this.additionalHeader = additionalHeader;
         return this;
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withSessionListener(final NetconfClientSessionListener sessionListener) {
         this.sessionListener = sessionListener;
         return this;
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withReconnectStrategy(final ReconnectStrategy reconnectStrategy) {
         this.reconnectStrategy = reconnectStrategy;
         return this;
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withAuthHandler(final AuthenticationHandler authHandler) {
         this.authHandler = authHandler;
         return this;
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withSslHandlerFactory(final SslHandlerFactory sslHandlerFactory) {
+        this.sslHandlerFactory = sslHandlerFactory;
+        return this;
+    }
+
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withSshClient(final NetconfSshClient sshClient) {
+        this.sshClient = sshClient;
+        return this;
+    }
+
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withOdlHelloCapabilities(final List<Uri> odlHelloCapabilities) {
+        this.odlHelloCapabilities = odlHelloCapabilities;
+        return this;
+    }
+
     final InetSocketAddress getAddress() {
         return address;
     }
@@ -96,7 +132,20 @@ public class NetconfClientConfigurationBuilder {
         return clientProtocol;
     }
 
+    final SslHandlerFactory getSslHandlerFactory() {
+        return sslHandlerFactory;
+    }
+
+    public NetconfSshClient getSshClient() {
+        return sshClient;
+    }
+
+    final List<Uri> getOdlHelloCapabilities() {
+        return odlHelloCapabilities;
+    }
+
     public NetconfClientConfiguration build() {
-        return new NetconfClientConfiguration(clientProtocol, address, connectionTimeoutMillis, additionalHeader, sessionListener, reconnectStrategy, authHandler);
+        return new NetconfClientConfiguration(clientProtocol, address, connectionTimeoutMillis, additionalHeader,
+                sessionListener, reconnectStrategy, authHandler, sslHandlerFactory, sshClient, odlHelloCapabilities);
     }
 }