cdb0f1946a8d4f099050f71dfab5e83c4c135271
[netconf.git] / protocol / netconf-client / src / main / java / org / opendaylight / netconf / client / conf / NetconfClientConfiguration.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 java.util.Objects.requireNonNull;
11
12 import com.google.common.base.MoreObjects;
13 import com.google.common.base.Preconditions;
14 import java.util.List;
15 import java.util.Optional;
16 import org.checkerframework.checker.index.qual.NonNegative;
17 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
18 import org.opendaylight.netconf.client.NetconfClientSessionListener;
19 import org.opendaylight.netconf.transport.ssh.ClientFactoryManagerConfigurator;
20 import org.opendaylight.netconf.transport.tls.SslHandlerFactory;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ssh.client.rev240208.SshClientGrouping;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tcp.client.rev240208.TcpClientGrouping;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tls.client.rev240208.TlsClientGrouping;
25
26 public final class NetconfClientConfiguration {
27
28     private final NetconfClientProtocol clientProtocol;
29     private final Long connectionTimeoutMillis;
30     private final NetconfHelloMessageAdditionalHeader additionalHeader;
31     private final NetconfClientSessionListener sessionListener;
32     private final List<Uri> odlHelloCapabilities;
33     private final @NonNegative int maximumIncomingChunkSize;
34     private final String name;
35
36     private final TcpClientGrouping tcpParameters;
37     private final TlsClientGrouping tlsParameters;
38     private final SslHandlerFactory sslHandlerFactory;
39     private final SshClientGrouping sshParameters;
40     private final ClientFactoryManagerConfigurator sshConfigurator;
41
42     NetconfClientConfiguration(final NetconfClientProtocol protocol,
43             final TcpClientGrouping tcpParameters,
44             final TlsClientGrouping tlsParameters,
45             final SslHandlerFactory sslHandlerFactory,
46             final SshClientGrouping sshParameters,
47             final ClientFactoryManagerConfigurator sshConfigurator,
48             final NetconfClientSessionListener sessionListener,
49             final List<Uri> odlHelloCapabilities,
50             final Long connectionTimeoutMillis,
51             final @NonNegative int maximumIncomingChunkSize,
52             final NetconfHelloMessageAdditionalHeader additionalHeader,
53             final String name) {
54         clientProtocol = requireNonNull(protocol);
55         this.name = name;
56         this.tcpParameters = requireNonNull(tcpParameters);
57         this.tlsParameters = tlsParameters;
58         this.sslHandlerFactory = sslHandlerFactory;
59         this.sshParameters = sshParameters;
60         this.sshConfigurator = sshConfigurator;
61         this.sessionListener = requireNonNull(sessionListener);
62         this.odlHelloCapabilities = odlHelloCapabilities;
63         this.connectionTimeoutMillis = connectionTimeoutMillis;
64         this.maximumIncomingChunkSize = maximumIncomingChunkSize;
65         this.additionalHeader = additionalHeader;
66         // validate
67         if (NetconfClientProtocol.TLS.equals(protocol)) {
68             Preconditions.checkArgument(tlsParameters != null || sslHandlerFactory != null,
69                 "Either tlsParameters or sslHandlerFactory is required");
70         } else if (NetconfClientProtocol.SSH.equals(protocol)) {
71             requireNonNull(sshParameters);
72         }
73     }
74
75     public String getName() {
76         return name;
77     }
78
79     public Long getConnectionTimeoutMillis() {
80         return connectionTimeoutMillis;
81     }
82
83     public Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
84         return Optional.ofNullable(additionalHeader);
85     }
86
87     public NetconfClientSessionListener getSessionListener() {
88         return sessionListener;
89     }
90
91     public NetconfClientProtocol getProtocol() {
92         return clientProtocol;
93     }
94
95     public SslHandlerFactory getSslHandlerFactory() {
96         return sslHandlerFactory;
97     }
98
99     public List<Uri> getOdlHelloCapabilities() {
100         return odlHelloCapabilities;
101     }
102
103     public @NonNegative int getMaximumIncomingChunkSize() {
104         return maximumIncomingChunkSize;
105     }
106
107     public TcpClientGrouping getTcpParameters() {
108         return tcpParameters;
109     }
110
111     public TlsClientGrouping getTlsParameters() {
112         return tlsParameters;
113     }
114
115     public SshClientGrouping getSshParameters() {
116         return sshParameters;
117     }
118
119     public ClientFactoryManagerConfigurator getSshConfigurator() {
120         return sshConfigurator;
121     }
122
123     @Override
124     public String toString() {
125         return MoreObjects.toStringHelper(this)
126             .add("clientProtocol", clientProtocol)
127             .add("connectionTimeoutMillis", connectionTimeoutMillis)
128             .add("additionalHeader", additionalHeader)
129             .add("sessionListener", sessionListener)
130             .add("tcpParameters", tcpParameters)
131             .add("tlsParameters", tlsParameters)
132             .add("sshParameters", sshParameters)
133             .add("sslHandlerFactory (defined)", sslHandlerFactory != null)
134             .add("sslHandlerFactory (defined)", sshConfigurator != null)
135             .toString();
136     }
137
138     public enum NetconfClientProtocol {
139         TCP, SSH, TLS
140     }
141 }