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.nettyutil.handler.ssh.authentication.AuthenticationHandler;
16 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
17 import org.opendaylight.netconf.client.NetconfClientSessionListener;
18 import org.opendaylight.protocol.framework.ReconnectStrategy;
20 public class NetconfClientConfiguration {
22 private final NetconfClientProtocol clientProtocol;
23 private final InetSocketAddress address;
24 private final Long connectionTimeoutMillis;
26 private final NetconfHelloMessageAdditionalHeader additionalHeader;
27 private final NetconfClientSessionListener sessionListener;
29 private final ReconnectStrategy reconnectStrategy;
31 private final AuthenticationHandler authHandler;
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();
44 public final InetSocketAddress getAddress() {
48 public final Long getConnectionTimeoutMillis() {
49 return connectionTimeoutMillis;
52 public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
53 return Optional.fromNullable(additionalHeader);
56 public final NetconfClientSessionListener getSessionListener() {
57 return sessionListener;
60 public final ReconnectStrategy getReconnectStrategy() {
61 return reconnectStrategy;
64 public final AuthenticationHandler getAuthHandler() {
68 public NetconfClientProtocol getProtocol() {
69 return clientProtocol;
72 private void validateConfiguration() {
73 Preconditions.checkNotNull(clientProtocol, " ");
74 switch (clientProtocol) {
76 validateSshConfiguration();
77 // Fall through intentional (ssh validation is a superset of tcp validation)
79 validateTcpConfiguration();
83 protected void validateSshConfiguration() {
84 Preconditions.checkNotNull(authHandler, "authHandler");
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");
96 public final String toString() {
97 return buildToStringHelper().toString();
100 protected ToStringHelper buildToStringHelper() {
101 return MoreObjects.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);
111 public static enum NetconfClientProtocol {