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 java.util.List;
16 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
17 import org.opendaylight.netconf.client.NetconfClientSessionListener;
18 import org.opendaylight.netconf.client.SslHandlerFactory;
19 import org.opendaylight.netconf.nettyutil.ReconnectStrategy;
20 import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.AuthenticationHandler;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
25 public class NetconfClientConfiguration {
27 private static final Logger LOG = LoggerFactory.getLogger(NetconfClientConfiguration.class);
29 private final NetconfClientProtocol clientProtocol;
30 private final InetSocketAddress address;
31 private final Long connectionTimeoutMillis;
33 private final NetconfHelloMessageAdditionalHeader additionalHeader;
34 private final NetconfClientSessionListener sessionListener;
36 private final ReconnectStrategy reconnectStrategy;
38 private final AuthenticationHandler authHandler;
39 private final SslHandlerFactory sslHandlerFactory;
41 private final List<Uri> odlHelloCapabilities;
43 NetconfClientConfiguration(final NetconfClientProtocol protocol, final InetSocketAddress address,
44 final Long connectionTimeoutMillis,
45 final NetconfHelloMessageAdditionalHeader additionalHeader,
46 final NetconfClientSessionListener sessionListener,
47 final ReconnectStrategy reconnectStrategy, final AuthenticationHandler authHandler,
48 final SslHandlerFactory sslHandlerFactory,
49 final List<Uri> odlHelloCapabilities) {
50 this.address = address;
51 this.connectionTimeoutMillis = connectionTimeoutMillis;
52 this.additionalHeader = additionalHeader;
53 this.sessionListener = sessionListener;
54 this.clientProtocol = protocol;
55 this.reconnectStrategy = reconnectStrategy;
56 this.authHandler = authHandler;
57 this.sslHandlerFactory = sslHandlerFactory;
58 this.odlHelloCapabilities = odlHelloCapabilities;
59 validateConfiguration();
62 public final InetSocketAddress getAddress() {
66 public final Long getConnectionTimeoutMillis() {
67 return connectionTimeoutMillis;
70 public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
71 return Optional.fromNullable(additionalHeader);
74 public final NetconfClientSessionListener getSessionListener() {
75 return sessionListener;
78 public final ReconnectStrategy getReconnectStrategy() {
79 return reconnectStrategy;
82 public final AuthenticationHandler getAuthHandler() {
86 public NetconfClientProtocol getProtocol() {
87 return clientProtocol;
90 public SslHandlerFactory getSslHandlerFactory() {
91 return sslHandlerFactory;
94 public List<Uri> getOdlHelloCapabilities() {
95 return odlHelloCapabilities;
98 private void validateConfiguration() {
99 Preconditions.checkNotNull(clientProtocol, " ");
100 switch (clientProtocol) {
102 validateTlsConfiguration();
103 validateTcpConfiguration();
106 validateSshConfiguration();
107 validateTcpConfiguration();
110 validateTcpConfiguration();
113 LOG.warn("Unexpected protocol: {} in netconf client configuration.", clientProtocol);
117 protected void validateTlsConfiguration() {
118 Preconditions.checkNotNull(sslHandlerFactory, "sslHandlerFactory");
121 protected void validateSshConfiguration() {
122 Preconditions.checkNotNull(authHandler, "authHandler");
125 protected void validateTcpConfiguration() {
126 Preconditions.checkNotNull(address, "address");
127 Preconditions.checkNotNull(clientProtocol, "clientProtocol");
128 Preconditions.checkNotNull(connectionTimeoutMillis, "connectionTimeoutMillis");
129 Preconditions.checkNotNull(sessionListener, "sessionListener");
130 Preconditions.checkNotNull(reconnectStrategy, "reconnectStrategy");
134 public final String toString() {
135 return buildToStringHelper().toString();
138 protected ToStringHelper buildToStringHelper() {
139 return MoreObjects.toStringHelper(this)
140 .add("address", address)
141 .add("connectionTimeoutMillis", connectionTimeoutMillis)
142 .add("additionalHeader", additionalHeader)
143 .add("sessionListener", sessionListener)
144 .add("reconnectStrategy", reconnectStrategy)
145 .add("clientProtocol", clientProtocol)
146 .add("authHandler", authHandler)
147 .add("sslHandlerFactory", sslHandlerFactory);
150 public enum NetconfClientProtocol {