Refresh IETF client/server models
[netconf.git] / protocol / netconf-client / src / main / java / org / opendaylight / netconf / client / conf / NetconfClientConfigurationBuilder.java
index 7aeb0e59756cf6429717da449a96286d9d005da2..d8a04b944b716b5c92fabc3d027faa164b26b484 100644 (file)
@@ -9,55 +9,66 @@ package org.opendaylight.netconf.client.conf;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import java.net.InetSocketAddress;
 import java.util.List;
 import org.checkerframework.checker.index.qual.NonNegative;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
 import org.opendaylight.netconf.client.NetconfClientSessionListener;
-import org.opendaylight.netconf.client.SslHandlerFactory;
-import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
-import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.AuthenticationHandler;
-import org.opendaylight.netconf.nettyutil.handler.ssh.client.NetconfSshClient;
+import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiator;
+import org.opendaylight.netconf.transport.ssh.ClientFactoryManagerConfigurator;
+import org.opendaylight.netconf.transport.tls.SslHandlerFactory;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ssh.client.rev231228.SshClientGrouping;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tcp.client.rev231228.TcpClientGrouping;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tls.client.rev231228.TlsClientGrouping;
 
-public class NetconfClientConfigurationBuilder {
-
+/**
+ * Builder for {@link NetconfClientConfiguration}.
+ */
+public final class NetconfClientConfigurationBuilder {
     public static final int DEFAULT_CONNECTION_TIMEOUT_MILLIS = 5000;
     public static final NetconfClientConfiguration.NetconfClientProtocol DEFAULT_CLIENT_PROTOCOL =
-            NetconfClientConfiguration.NetconfClientProtocol.TCP;
+        NetconfClientConfiguration.NetconfClientProtocol.TCP;
 
-    private InetSocketAddress address;
     private long connectionTimeoutMillis = DEFAULT_CONNECTION_TIMEOUT_MILLIS;
+    private @NonNegative int maximumIncomingChunkSize =
+        NetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE;
     private NetconfHelloMessageAdditionalHeader additionalHeader;
     private NetconfClientSessionListener sessionListener;
-    private AuthenticationHandler authHandler;
     private NetconfClientConfiguration.NetconfClientProtocol clientProtocol = DEFAULT_CLIENT_PROTOCOL;
-    private SslHandlerFactory sslHandlerFactory;
-    private NetconfSshClient sshClient;
     private List<Uri> odlHelloCapabilities;
-    private @NonNegative int maximumIncomingChunkSize =
-        AbstractNetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE;
     private String name;
+    private TcpClientGrouping tcpParameters;
+    private TlsClientGrouping tlsParameters;
+    private SslHandlerFactory sslHandlerFactory;
+    private SshClientGrouping sshParameters;
+    private ClientFactoryManagerConfigurator sshConfigurator;
 
-    protected NetconfClientConfigurationBuilder() {
+    private NetconfClientConfigurationBuilder() {
+        // on purpose
     }
 
     public static NetconfClientConfigurationBuilder create() {
         return new NetconfClientConfigurationBuilder();
     }
 
-    @SuppressWarnings("checkstyle:hiddenField")
-    public NetconfClientConfigurationBuilder withAddress(final InetSocketAddress address) {
-        this.address = address;
-        return this;
-    }
-
+    /**
+     * Set connection timeout value in milliseconds.
+     *
+     * @param connectionTimeoutMillis value
+     * @return current builder instance
+     */
     @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withConnectionTimeoutMillis(final long connectionTimeoutMillis) {
         this.connectionTimeoutMillis = connectionTimeoutMillis;
         return this;
     }
 
+    /**
+     * Set client protocol.
+     *
+     * @param clientProtocol client protocol
+     * @return current builder instance
+     */
     @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withProtocol(
             final NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
@@ -65,6 +76,12 @@ public class NetconfClientConfigurationBuilder {
         return this;
     }
 
+    /**
+     * Set additional header for Hello message.
+     *
+     * @param additionalHeader additional header
+     * @return current builder instance
+     */
     @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withAdditionalHeader(
             final NetconfHelloMessageAdditionalHeader additionalHeader) {
@@ -72,97 +89,126 @@ public class NetconfClientConfigurationBuilder {
         return this;
     }
 
+    /**
+     * Set NETCONF session client listener.
+     *
+     * @param sessionListener session listener
+     * @return current builder instance
+     */
     @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withSessionListener(final NetconfClientSessionListener sessionListener) {
         this.sessionListener = sessionListener;
         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;
-    }
-
+    /**
+     * Set client name.
+     *
+     * @param name value
+     * @return current builder instance
+     */
     @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withName(final String name) {
         this.name = name;
         return this;
     }
 
+    /**
+     * Set capabilities for Hello message.
+     *
+     * @param odlHelloCapabilities capabilities
+     * @return current builder instance
+     */
     @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withOdlHelloCapabilities(final List<Uri> odlHelloCapabilities) {
         this.odlHelloCapabilities = odlHelloCapabilities;
         return this;
     }
 
+    /**
+     * Set max size of incoming data chink in bytes. Positive value is required.
+     *
+     * @param maximumIncomingChunkSize value
+     * @return current builder instance
+     * @throws IllegalArgumentException if value zero or less
+     */
     @SuppressWarnings("checkstyle:hiddenField")
     public NetconfClientConfigurationBuilder withMaximumIncomingChunkSize(
             final @NonNegative int maximumIncomingChunkSize) {
         checkArgument(maximumIncomingChunkSize > 0);
-        this.maximumIncomingChunkSize  = maximumIncomingChunkSize;
+        this.maximumIncomingChunkSize = maximumIncomingChunkSize;
         return this;
     }
 
-    final InetSocketAddress getAddress() {
-        return address;
-    }
-
-    final long getConnectionTimeoutMillis() {
-        return connectionTimeoutMillis;
-    }
-
-    final NetconfHelloMessageAdditionalHeader getAdditionalHeader() {
-        return additionalHeader;
-    }
-
-    final NetconfClientSessionListener getSessionListener() {
-        return sessionListener;
-    }
-
-    final AuthenticationHandler getAuthHandler() {
-        return authHandler;
-    }
-
-    final NetconfClientConfiguration.NetconfClientProtocol getProtocol() {
-        return clientProtocol;
-    }
-
-    final SslHandlerFactory getSslHandlerFactory() {
-        return sslHandlerFactory;
+    /**
+     * Set TCP client transport parameters.
+     *
+     * @param tcpParameters parameters
+     * @return current builder instance
+     */
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withTcpParameters(final TcpClientGrouping tcpParameters) {
+        this.tcpParameters = tcpParameters;
+        return this;
     }
 
-    public NetconfSshClient getSshClient() {
-        return sshClient;
+    /**
+     * Set TLS client transport parameters.
+     *
+     * @param tlsParameters parameters
+     * @return current builder instance
+     */
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withTlsParameters(final TlsClientGrouping tlsParameters) {
+        this.tlsParameters = tlsParameters;
+        return this;
     }
 
-    final List<Uri> getOdlHelloCapabilities() {
-        return odlHelloCapabilities;
+    /**
+     * Set SslHandlerFactory for TLS transport.
+     *
+     * @param sslHandlerFactory ssl handler factory
+     * @return current builder instance
+     */
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withSslHandlerFactory(final SslHandlerFactory sslHandlerFactory) {
+        this.sslHandlerFactory = sslHandlerFactory;
+        return this;
     }
 
-    final @NonNegative int getMaximumIncomingChunkSize() {
-        return maximumIncomingChunkSize;
+    /**
+     * Set SSH client transport parameters.
+     *
+     * @param sshParameters SSH parameters
+     * @return current builder instance
+     */
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withSshParameters(final SshClientGrouping sshParameters) {
+        this.sshParameters = sshParameters;
+        return this;
     }
 
-    final String getName() {
-        return name;
+    /**
+     * Set SSH Client Factory Manager configurator.
+     *
+     * @param sshConfigurator configurator
+     * @return current builder instance
+     */
+    @SuppressWarnings("checkstyle:hiddenField")
+    public NetconfClientConfigurationBuilder withSshConfigurator(
+            final ClientFactoryManagerConfigurator sshConfigurator) {
+        this.sshConfigurator = sshConfigurator;
+        return this;
     }
 
+    /**
+     * Builds configuration based on parameters provided.
+     *
+     * @return immutable configuration instance
+     */
     public NetconfClientConfiguration build() {
-        return new NetconfClientConfiguration(clientProtocol, address, connectionTimeoutMillis, additionalHeader,
-                sessionListener, authHandler, sslHandlerFactory, sshClient, odlHelloCapabilities,
-                maximumIncomingChunkSize, name);
+        return new NetconfClientConfiguration(clientProtocol, tcpParameters, tlsParameters, sslHandlerFactory,
+                sshParameters, sshConfigurator, sessionListener, odlHelloCapabilities, connectionTimeoutMillis,
+                maximumIncomingChunkSize, additionalHeader, name);
     }
 }