b25071156234e1a02b3a174413cfb6766a1893e7
[netconf.git] / netconf / 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 com.google.common.base.MoreObjects;
11 import com.google.common.base.MoreObjects.ToStringHelper;
12 import com.google.common.base.Optional;
13 import com.google.common.base.Preconditions;
14 import java.net.InetSocketAddress;
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.handler.ssh.authentication.AuthenticationHandler;
19 import org.opendaylight.protocol.framework.ReconnectStrategy;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 public class NetconfClientConfiguration {
24
25     private static final Logger LOG = LoggerFactory.getLogger(NetconfClientConfiguration.class);
26
27     private final NetconfClientProtocol clientProtocol;
28     private final InetSocketAddress address;
29     private final Long connectionTimeoutMillis;
30
31     private final NetconfHelloMessageAdditionalHeader additionalHeader;
32     private final NetconfClientSessionListener sessionListener;
33
34     private final ReconnectStrategy reconnectStrategy;
35
36     private final AuthenticationHandler authHandler;
37     private final SslHandlerFactory sslHandlerFactory;
38
39     NetconfClientConfiguration(final NetconfClientProtocol protocol, final InetSocketAddress address,
40                                final Long connectionTimeoutMillis,
41                                final NetconfHelloMessageAdditionalHeader additionalHeader,
42                                final NetconfClientSessionListener sessionListener,
43                                final ReconnectStrategy reconnectStrategy, final AuthenticationHandler authHandler,
44                                final SslHandlerFactory sslHandlerFactory) {
45         this.address = address;
46         this.connectionTimeoutMillis = connectionTimeoutMillis;
47         this.additionalHeader = additionalHeader;
48         this.sessionListener = sessionListener;
49         this.clientProtocol = protocol;
50         this.reconnectStrategy = reconnectStrategy;
51         this.authHandler = authHandler;
52         this.sslHandlerFactory = sslHandlerFactory;
53         validateConfiguration();
54     }
55
56     public final InetSocketAddress getAddress() {
57         return address;
58     }
59
60     public final Long getConnectionTimeoutMillis() {
61         return connectionTimeoutMillis;
62     }
63
64     public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
65         return Optional.fromNullable(additionalHeader);
66     }
67
68     public final NetconfClientSessionListener getSessionListener() {
69         return sessionListener;
70     }
71
72     public final ReconnectStrategy getReconnectStrategy() {
73         return reconnectStrategy;
74     }
75
76     public final AuthenticationHandler getAuthHandler() {
77         return authHandler;
78     }
79
80     public NetconfClientProtocol getProtocol() {
81         return clientProtocol;
82     }
83
84     public SslHandlerFactory getSslHandlerFactory() {
85         return sslHandlerFactory;
86     }
87
88     @SuppressWarnings("checkstyle:FallThrough")
89     private void validateConfiguration() {
90         Preconditions.checkNotNull(clientProtocol, " ");
91         switch (clientProtocol) {
92             case TLS:
93             case SSH:
94                 if (clientProtocol == NetconfClientProtocol.SSH) {
95                     validateSshConfiguration();
96                 } else {
97                     validateTlsConfiguration();
98                 }
99                 // Fall through intentional (ssh or tls validation is a superset of tcp validation)
100             case TCP:
101                 validateTcpConfiguration();
102                 break;
103             default:
104                 LOG.warn("Unexpected protocol: {} in netconf client configuration.", clientProtocol);
105         }
106     }
107
108     protected void validateTlsConfiguration() {
109         Preconditions.checkNotNull(sslHandlerFactory, "sslHandlerFactory");
110     }
111
112     protected void validateSshConfiguration() {
113         Preconditions.checkNotNull(authHandler, "authHandler");
114     }
115
116     protected void validateTcpConfiguration() {
117         Preconditions.checkNotNull(address, "address");
118         Preconditions.checkNotNull(clientProtocol, "clientProtocol");
119         Preconditions.checkNotNull(connectionTimeoutMillis, "connectionTimeoutMillis");
120         Preconditions.checkNotNull(sessionListener, "sessionListener");
121         Preconditions.checkNotNull(reconnectStrategy, "reconnectStrategy");
122     }
123
124     @Override
125     public final String toString() {
126         return buildToStringHelper().toString();
127     }
128
129     protected ToStringHelper buildToStringHelper() {
130         return MoreObjects.toStringHelper(this)
131                 .add("address", address)
132                 .add("connectionTimeoutMillis", connectionTimeoutMillis)
133                 .add("additionalHeader", additionalHeader)
134                 .add("sessionListener", sessionListener)
135                 .add("reconnectStrategy", reconnectStrategy)
136                 .add("clientProtocol", clientProtocol)
137                 .add("authHandler", authHandler)
138                 .add("sslHandlerFactory", sslHandlerFactory);
139     }
140
141     public enum NetconfClientProtocol {
142         TCP, SSH, TLS
143     }
144 }