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