Merge "Fixed typo in SnapshotBackedWriteTransaction class"
[controller.git] / opendaylight / netconf / netconf-client / src / main / java / org / opendaylight / controller / 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.controller.netconf.client.conf;
9
10 import com.google.common.base.Objects;
11 import com.google.common.base.Optional;
12 import com.google.common.base.Preconditions;
13 import org.opendaylight.controller.netconf.client.NetconfClientSessionListener;
14 import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
15 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
16 import org.opendaylight.protocol.framework.ReconnectStrategy;
17
18 import java.net.InetSocketAddress;
19
20 public class NetconfClientConfiguration {
21
22     private final NetconfClientProtocol clientProtocol;
23     private final InetSocketAddress address;
24     private final Long connectionTimeoutMillis;
25
26     private final NetconfHelloMessageAdditionalHeader additionalHeader;
27     private final NetconfClientSessionListener sessionListener;
28
29     private final ReconnectStrategy reconnectStrategy;
30
31     private final AuthenticationHandler authHandler;
32
33     NetconfClientConfiguration(final NetconfClientProtocol protocol, final InetSocketAddress address, final Long connectionTimeoutMillis, final NetconfHelloMessageAdditionalHeader additionalHeader, final NetconfClientSessionListener sessionListener, final ReconnectStrategy reconnectStrategy, final AuthenticationHandler authHandler) {
34         this.address = address;
35         this.connectionTimeoutMillis = connectionTimeoutMillis;
36         this.additionalHeader = additionalHeader;
37         this.sessionListener = sessionListener;
38         this.clientProtocol = protocol;
39         this.reconnectStrategy = reconnectStrategy;
40         this.authHandler = authHandler;
41         validateConfiguration();
42     }
43
44     public final InetSocketAddress getAddress() {
45         return address;
46     }
47
48     public final Long getConnectionTimeoutMillis() {
49         return connectionTimeoutMillis;
50     }
51
52     public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
53         return Optional.fromNullable(additionalHeader);
54     }
55
56     public final NetconfClientSessionListener getSessionListener() {
57         return sessionListener;
58     }
59
60     public final ReconnectStrategy getReconnectStrategy() {
61         return reconnectStrategy;
62     }
63
64     public final AuthenticationHandler getAuthHandler() {
65         return authHandler;
66     }
67
68     public NetconfClientProtocol getProtocol() {
69         return clientProtocol;
70     }
71
72     private void validateConfiguration() {
73         Preconditions.checkNotNull(clientProtocol, " ");
74         switch (clientProtocol) {
75         case SSH:
76             validateSshConfiguration();
77             // Fall through intentional (ssh validation is a superset of tcp validation)
78         case TCP:
79             validateTcpConfiguration();
80         }
81     }
82
83     protected void validateSshConfiguration() {
84         Preconditions.checkNotNull(authHandler, "authHandler");
85     }
86
87     protected void validateTcpConfiguration() {
88         Preconditions.checkNotNull(address, "address");
89         Preconditions.checkNotNull(clientProtocol, "clientProtocol");
90         Preconditions.checkNotNull(connectionTimeoutMillis, "connectionTimeoutMillis");
91         Preconditions.checkNotNull(sessionListener, "sessionListener");
92         Preconditions.checkNotNull(reconnectStrategy, "reconnectStrategy");
93     }
94
95     @Override
96     public final String toString() {
97         return buildToStringHelper().toString();
98     }
99
100     protected Objects.ToStringHelper buildToStringHelper() {
101         return Objects.toStringHelper(this)
102                 .add("address", address)
103                 .add("connectionTimeoutMillis", connectionTimeoutMillis)
104                 .add("additionalHeader", additionalHeader)
105                 .add("sessionListener", sessionListener)
106                 .add("reconnectStrategy", reconnectStrategy)
107                 .add("clientProtocol", clientProtocol)
108                 .add("authHandler", authHandler);
109     }
110
111     public static enum NetconfClientProtocol {
112         TCP, SSH
113     }
114 }