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) {
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) {
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);
}
}