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