2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.client.conf;
10 import static com.google.common.base.Preconditions.checkArgument;
12 import java.util.List;
13 import org.checkerframework.checker.index.qual.NonNegative;
14 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
15 import org.opendaylight.netconf.client.NetconfClientSessionListener;
16 import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiator;
17 import org.opendaylight.netconf.transport.ssh.ClientFactoryManagerConfigurator;
18 import org.opendaylight.netconf.transport.tls.SslHandlerFactory;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ssh.client.rev240208.SshClientGrouping;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tcp.client.rev240208.TcpClientGrouping;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tls.client.rev240208.TlsClientGrouping;
25 * Builder for {@link NetconfClientConfiguration}.
27 public final class NetconfClientConfigurationBuilder {
28 public static final int DEFAULT_CONNECTION_TIMEOUT_MILLIS = 5000;
29 public static final NetconfClientConfiguration.NetconfClientProtocol DEFAULT_CLIENT_PROTOCOL =
30 NetconfClientConfiguration.NetconfClientProtocol.TCP;
32 private long connectionTimeoutMillis = DEFAULT_CONNECTION_TIMEOUT_MILLIS;
33 private @NonNegative int maximumIncomingChunkSize =
34 NetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE;
35 private NetconfHelloMessageAdditionalHeader additionalHeader;
36 private NetconfClientSessionListener sessionListener;
37 private NetconfClientConfiguration.NetconfClientProtocol clientProtocol = DEFAULT_CLIENT_PROTOCOL;
38 private List<Uri> odlHelloCapabilities;
40 private TcpClientGrouping tcpParameters;
41 private TlsClientGrouping tlsParameters;
42 private SslHandlerFactory sslHandlerFactory;
43 private SshClientGrouping sshParameters;
44 private ClientFactoryManagerConfigurator sshConfigurator;
46 private NetconfClientConfigurationBuilder() {
50 public static NetconfClientConfigurationBuilder create() {
51 return new NetconfClientConfigurationBuilder();
55 * Set connection timeout value in milliseconds.
57 * @param connectionTimeoutMillis value
58 * @return current builder instance
60 @SuppressWarnings("checkstyle:hiddenField")
61 public NetconfClientConfigurationBuilder withConnectionTimeoutMillis(final long connectionTimeoutMillis) {
62 this.connectionTimeoutMillis = connectionTimeoutMillis;
67 * Set client protocol.
69 * @param clientProtocol client protocol
70 * @return current builder instance
72 @SuppressWarnings("checkstyle:hiddenField")
73 public NetconfClientConfigurationBuilder withProtocol(
74 final NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
75 this.clientProtocol = clientProtocol;
80 * Set additional header for Hello message.
82 * @param additionalHeader additional header
83 * @return current builder instance
85 @SuppressWarnings("checkstyle:hiddenField")
86 public NetconfClientConfigurationBuilder withAdditionalHeader(
87 final NetconfHelloMessageAdditionalHeader additionalHeader) {
88 this.additionalHeader = additionalHeader;
93 * Set NETCONF session client listener.
95 * @param sessionListener session listener
96 * @return current builder instance
98 @SuppressWarnings("checkstyle:hiddenField")
99 public NetconfClientConfigurationBuilder withSessionListener(final NetconfClientSessionListener sessionListener) {
100 this.sessionListener = sessionListener;
108 * @return current builder instance
110 @SuppressWarnings("checkstyle:hiddenField")
111 public NetconfClientConfigurationBuilder withName(final String name) {
117 * Set capabilities for Hello message.
119 * @param odlHelloCapabilities capabilities
120 * @return current builder instance
122 @SuppressWarnings("checkstyle:hiddenField")
123 public NetconfClientConfigurationBuilder withOdlHelloCapabilities(final List<Uri> odlHelloCapabilities) {
124 this.odlHelloCapabilities = odlHelloCapabilities;
129 * Set max size of incoming data chink in bytes. Positive value is required.
131 * @param maximumIncomingChunkSize value
132 * @return current builder instance
133 * @throws IllegalArgumentException if value zero or less
135 @SuppressWarnings("checkstyle:hiddenField")
136 public NetconfClientConfigurationBuilder withMaximumIncomingChunkSize(
137 final @NonNegative int maximumIncomingChunkSize) {
138 checkArgument(maximumIncomingChunkSize > 0);
139 this.maximumIncomingChunkSize = maximumIncomingChunkSize;
144 * Set TCP client transport parameters.
146 * @param tcpParameters parameters
147 * @return current builder instance
149 @SuppressWarnings("checkstyle:hiddenField")
150 public NetconfClientConfigurationBuilder withTcpParameters(final TcpClientGrouping tcpParameters) {
151 this.tcpParameters = tcpParameters;
156 * Set TLS client transport parameters.
158 * @param tlsParameters parameters
159 * @return current builder instance
161 @SuppressWarnings("checkstyle:hiddenField")
162 public NetconfClientConfigurationBuilder withTlsParameters(final TlsClientGrouping tlsParameters) {
163 this.tlsParameters = tlsParameters;
168 * Set SslHandlerFactory for TLS transport.
170 * @param sslHandlerFactory ssl handler factory
171 * @return current builder instance
173 @SuppressWarnings("checkstyle:hiddenField")
174 public NetconfClientConfigurationBuilder withSslHandlerFactory(final SslHandlerFactory sslHandlerFactory) {
175 this.sslHandlerFactory = sslHandlerFactory;
180 * Set SSH client transport parameters.
182 * @param sshParameters SSH parameters
183 * @return current builder instance
185 @SuppressWarnings("checkstyle:hiddenField")
186 public NetconfClientConfigurationBuilder withSshParameters(final SshClientGrouping sshParameters) {
187 this.sshParameters = sshParameters;
192 * Set SSH Client Factory Manager configurator.
194 * @param sshConfigurator configurator
195 * @return current builder instance
197 @SuppressWarnings("checkstyle:hiddenField")
198 public NetconfClientConfigurationBuilder withSshConfigurator(
199 final ClientFactoryManagerConfigurator sshConfigurator) {
200 this.sshConfigurator = sshConfigurator;
205 * Builds configuration based on parameters provided.
207 * @return immutable configuration instance
209 public NetconfClientConfiguration build() {
210 return new NetconfClientConfiguration(clientProtocol, tcpParameters, tlsParameters, sslHandlerFactory,
211 sshParameters, sshConfigurator, sessionListener, odlHelloCapabilities, connectionTimeoutMillis,
212 maximumIncomingChunkSize, additionalHeader, name);