Teach netconf-client abount maximum incoming chunk size
[netconf.git] / netconf / netconf-client / src / main / java / org / opendaylight / netconf / client / conf / NetconfClientConfigurationBuilder.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.netconf.client.conf;
9
10 import static com.google.common.base.Preconditions.checkArgument;
11
12 import java.net.InetSocketAddress;
13 import java.util.List;
14 import org.checkerframework.checker.index.qual.NonNegative;
15 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
16 import org.opendaylight.netconf.client.NetconfClientSessionListener;
17 import org.opendaylight.netconf.client.SslHandlerFactory;
18 import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
19 import org.opendaylight.netconf.nettyutil.ReconnectStrategy;
20 import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.AuthenticationHandler;
21 import org.opendaylight.netconf.nettyutil.handler.ssh.client.NetconfSshClient;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
23
24 public class NetconfClientConfigurationBuilder {
25
26     public static final int DEFAULT_CONNECTION_TIMEOUT_MILLIS = 5000;
27     public static final NetconfClientConfiguration.NetconfClientProtocol DEFAULT_CLIENT_PROTOCOL =
28             NetconfClientConfiguration.NetconfClientProtocol.TCP;
29
30     private InetSocketAddress address;
31     private long connectionTimeoutMillis = DEFAULT_CONNECTION_TIMEOUT_MILLIS;
32     private NetconfHelloMessageAdditionalHeader additionalHeader;
33     private NetconfClientSessionListener sessionListener;
34     private ReconnectStrategy reconnectStrategy;
35     private AuthenticationHandler authHandler;
36     private NetconfClientConfiguration.NetconfClientProtocol clientProtocol = DEFAULT_CLIENT_PROTOCOL;
37     private SslHandlerFactory sslHandlerFactory;
38     private NetconfSshClient sshClient;
39     private List<Uri> odlHelloCapabilities;
40     private @NonNegative int maximumIncomingChunkSize =
41         AbstractNetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE;
42
43     protected NetconfClientConfigurationBuilder() {
44     }
45
46     public static NetconfClientConfigurationBuilder create() {
47         return new NetconfClientConfigurationBuilder();
48     }
49
50     @SuppressWarnings("checkstyle:hiddenField")
51     public NetconfClientConfigurationBuilder withAddress(final InetSocketAddress address) {
52         this.address = address;
53         return this;
54     }
55
56     @SuppressWarnings("checkstyle:hiddenField")
57     public NetconfClientConfigurationBuilder withConnectionTimeoutMillis(final long connectionTimeoutMillis) {
58         this.connectionTimeoutMillis = connectionTimeoutMillis;
59         return this;
60     }
61
62     @SuppressWarnings("checkstyle:hiddenField")
63     public NetconfClientConfigurationBuilder withProtocol(
64             final NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
65         this.clientProtocol = clientProtocol;
66         return this;
67     }
68
69     @SuppressWarnings("checkstyle:hiddenField")
70     public NetconfClientConfigurationBuilder withAdditionalHeader(
71             final NetconfHelloMessageAdditionalHeader additionalHeader) {
72         this.additionalHeader = additionalHeader;
73         return this;
74     }
75
76     @SuppressWarnings("checkstyle:hiddenField")
77     public NetconfClientConfigurationBuilder withSessionListener(final NetconfClientSessionListener sessionListener) {
78         this.sessionListener = sessionListener;
79         return this;
80     }
81
82     @SuppressWarnings("checkstyle:hiddenField")
83     public NetconfClientConfigurationBuilder withReconnectStrategy(final ReconnectStrategy reconnectStrategy) {
84         this.reconnectStrategy = reconnectStrategy;
85         return this;
86     }
87
88     @SuppressWarnings("checkstyle:hiddenField")
89     public NetconfClientConfigurationBuilder withAuthHandler(final AuthenticationHandler authHandler) {
90         this.authHandler = authHandler;
91         return this;
92     }
93
94     @SuppressWarnings("checkstyle:hiddenField")
95     public NetconfClientConfigurationBuilder withSslHandlerFactory(final SslHandlerFactory sslHandlerFactory) {
96         this.sslHandlerFactory = sslHandlerFactory;
97         return this;
98     }
99
100     @SuppressWarnings("checkstyle:hiddenField")
101     public NetconfClientConfigurationBuilder withSshClient(final NetconfSshClient sshClient) {
102         this.sshClient = sshClient;
103         return this;
104     }
105
106     @SuppressWarnings("checkstyle:hiddenField")
107     public NetconfClientConfigurationBuilder withOdlHelloCapabilities(final List<Uri> odlHelloCapabilities) {
108         this.odlHelloCapabilities = odlHelloCapabilities;
109         return this;
110     }
111
112     @SuppressWarnings("checkstyle:hiddenField")
113     public NetconfClientConfigurationBuilder withMaximumIncomingChunkSize(
114             final @NonNegative int maximumIncomingChunkSize) {
115         checkArgument(maximumIncomingChunkSize > 0);
116         this.maximumIncomingChunkSize  = maximumIncomingChunkSize;
117         return this;
118     }
119
120     final InetSocketAddress getAddress() {
121         return address;
122     }
123
124     final long getConnectionTimeoutMillis() {
125         return connectionTimeoutMillis;
126     }
127
128     final NetconfHelloMessageAdditionalHeader getAdditionalHeader() {
129         return additionalHeader;
130     }
131
132     final NetconfClientSessionListener getSessionListener() {
133         return sessionListener;
134     }
135
136     final ReconnectStrategy getReconnectStrategy() {
137         return reconnectStrategy;
138     }
139
140     final AuthenticationHandler getAuthHandler() {
141         return authHandler;
142     }
143
144     final NetconfClientConfiguration.NetconfClientProtocol getProtocol() {
145         return clientProtocol;
146     }
147
148     final SslHandlerFactory getSslHandlerFactory() {
149         return sslHandlerFactory;
150     }
151
152     public NetconfSshClient getSshClient() {
153         return sshClient;
154     }
155
156     final List<Uri> getOdlHelloCapabilities() {
157         return odlHelloCapabilities;
158     }
159
160     final @NonNegative int getMaximumIncomingChunkSize() {
161         return maximumIncomingChunkSize;
162     }
163
164     public NetconfClientConfiguration build() {
165         return new NetconfClientConfiguration(clientProtocol, address, connectionTimeoutMillis, additionalHeader,
166                 sessionListener, reconnectStrategy, authHandler, sslHandlerFactory, sshClient, odlHelloCapabilities,
167                 maximumIncomingChunkSize);
168     }
169 }