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.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;
23 public class NetconfClientConfiguration {
25 private static final Logger LOG = LoggerFactory.getLogger(NetconfClientConfiguration.class);
27 private final NetconfClientProtocol clientProtocol;
28 private final InetSocketAddress address;
29 private final Long connectionTimeoutMillis;
31 private final NetconfHelloMessageAdditionalHeader additionalHeader;
32 private final NetconfClientSessionListener sessionListener;
34 private final ReconnectStrategy reconnectStrategy;
36 private final AuthenticationHandler authHandler;
37 private final SslHandlerFactory sslHandlerFactory;
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();
56 public final InetSocketAddress getAddress() {
60 public final Long getConnectionTimeoutMillis() {
61 return connectionTimeoutMillis;
64 public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
65 return Optional.fromNullable(additionalHeader);
68 public final NetconfClientSessionListener getSessionListener() {
69 return sessionListener;
72 public final ReconnectStrategy getReconnectStrategy() {
73 return reconnectStrategy;
76 public final AuthenticationHandler getAuthHandler() {
80 public NetconfClientProtocol getProtocol() {
81 return clientProtocol;
84 public SslHandlerFactory getSslHandlerFactory() {
85 return sslHandlerFactory;
88 private void validateConfiguration() {
89 Preconditions.checkNotNull(clientProtocol, " ");
90 switch (clientProtocol) {
92 validateTlsConfiguration();
93 validateTcpConfiguration();
96 validateSshConfiguration();
97 validateTcpConfiguration();
100 validateTcpConfiguration();
103 LOG.warn("Unexpected protocol: {} in netconf client configuration.", clientProtocol);
107 protected void validateTlsConfiguration() {
108 Preconditions.checkNotNull(sslHandlerFactory, "sslHandlerFactory");
111 protected void validateSshConfiguration() {
112 Preconditions.checkNotNull(authHandler, "authHandler");
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");
124 public final String toString() {
125 return buildToStringHelper().toString();
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);
140 public enum NetconfClientProtocol {