2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.netconf.client.conf;
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;
22 public class NetconfClientConfiguration {
24 private static final Logger LOG = LoggerFactory.getLogger(NetconfClientConfiguration.class);
26 private final NetconfClientProtocol clientProtocol;
27 private final InetSocketAddress address;
28 private final Long connectionTimeoutMillis;
30 private final NetconfHelloMessageAdditionalHeader additionalHeader;
31 private final NetconfClientSessionListener sessionListener;
33 private final ReconnectStrategy reconnectStrategy;
35 private final AuthenticationHandler authHandler;
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();
52 public final InetSocketAddress getAddress() {
56 public final Long getConnectionTimeoutMillis() {
57 return connectionTimeoutMillis;
60 public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
61 return Optional.fromNullable(additionalHeader);
64 public final NetconfClientSessionListener getSessionListener() {
65 return sessionListener;
68 public final ReconnectStrategy getReconnectStrategy() {
69 return reconnectStrategy;
72 public final AuthenticationHandler getAuthHandler() {
76 public NetconfClientProtocol getProtocol() {
77 return clientProtocol;
80 @SuppressWarnings("checkstyle:FallThrough")
81 private void validateConfiguration() {
82 Preconditions.checkNotNull(clientProtocol, " ");
83 switch (clientProtocol) {
85 validateSshConfiguration();
86 // Fall through intentional (ssh validation is a superset of tcp validation)
88 validateTcpConfiguration();
90 LOG.warn("Unexpected protocol: {} in netconf client configuration.", clientProtocol);
94 protected void validateSshConfiguration() {
95 Preconditions.checkNotNull(authHandler, "authHandler");
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");
107 public final String toString() {
108 return buildToStringHelper().toString();
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);
122 public enum NetconfClientProtocol {