Merge "Fix findbugs violations in netconf"
[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     private void validateConfiguration() {
89         Preconditions.checkNotNull(clientProtocol, " ");
90         switch (clientProtocol) {
91             case TLS:
92                 validateTlsConfiguration();
93                 validateTcpConfiguration();
94                 break;
95             case SSH:
96                 validateSshConfiguration();
97                 validateTcpConfiguration();
98                 break;
99             case TCP:
100                 validateTcpConfiguration();
101                 break;
102             default:
103                 LOG.warn("Unexpected protocol: {} in netconf client configuration.", clientProtocol);
104         }
105     }
106
107     protected void validateTlsConfiguration() {
108         Preconditions.checkNotNull(sslHandlerFactory, "sslHandlerFactory");
109     }
110
111     protected void validateSshConfiguration() {
112         Preconditions.checkNotNull(authHandler, "authHandler");
113     }
114
115     protected void validateTcpConfiguration() {
116         Preconditions.checkNotNull(address, "address");
117         Preconditions.checkNotNull(clientProtocol, "clientProtocol");
118         Preconditions.checkNotNull(connectionTimeoutMillis, "connectionTimeoutMillis");
119         Preconditions.checkNotNull(sessionListener, "sessionListener");
120         Preconditions.checkNotNull(reconnectStrategy, "reconnectStrategy");
121     }
122
123     @Override
124     public final String toString() {
125         return buildToStringHelper().toString();
126     }
127
128     protected ToStringHelper buildToStringHelper() {
129         return MoreObjects.toStringHelper(this)
130                 .add("address", address)
131                 .add("connectionTimeoutMillis", connectionTimeoutMillis)
132                 .add("additionalHeader", additionalHeader)
133                 .add("sessionListener", sessionListener)
134                 .add("reconnectStrategy", reconnectStrategy)
135                 .add("clientProtocol", clientProtocol)
136                 .add("authHandler", authHandler)
137                 .add("sslHandlerFactory", sslHandlerFactory);
138     }
139
140     public enum NetconfClientProtocol {
141         TCP, SSH, TLS
142     }
143 }