c4b60b29fc47c2724eeea559b0430516b3cf7c59
[netconf.git] / netconf / netconf-topology-impl / src / main / java / org / opendaylight / netconf / topology / impl / NetconfConnectorFactoryImpl.java
1 /*
2  * Copyright (c) 2016 Inocybe Technologies 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.netconf.topology.impl;
9
10 import com.google.common.util.concurrent.FutureCallback;
11 import com.google.common.util.concurrent.MoreExecutors;
12 import org.opendaylight.mdsal.binding.api.DataBroker;
13 import org.opendaylight.mdsal.binding.api.WriteTransaction;
14 import org.opendaylight.mdsal.common.api.CommitInfo;
15 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
16 import org.opendaylight.netconf.topology.api.NetconfConnectorFactory;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.HostBuilder;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPwBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.login.pw.LoginPasswordBuilder;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
25 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.opendaylight.yangtools.yang.common.Uint16;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 /**
36  * Created by adetalhouet on 2016-11-03.
37  */
38 public class NetconfConnectorFactoryImpl implements NetconfConnectorFactory {
39
40     private static final Logger LOG = LoggerFactory.getLogger(NetconfConnectorFactoryImpl.class);
41
42     private static final InstanceIdentifier<Topology> TOPOLOGY_PATH = InstanceIdentifier.create(NetworkTopology.class)
43             .child(Topology.class, new TopologyKey(new TopologyId("topology-netconf")));
44
45     @Override
46     public Node newInstance(final DataBroker dataBroker,
47                             final String instanceName,
48                             final String address,
49                             final Integer port,
50                             final String username,
51                             final String password,
52                             final Boolean tcpOnly,
53                             final Boolean reconnectOnSchemaChange) {
54
55         final NodeKey nodeKey = new NodeKey(new NodeId(instanceName));
56         final Node node =  new NodeBuilder()
57                 .withKey(nodeKey)
58                 .addAugmentation(new NetconfNodeBuilder()
59                     .setHost(HostBuilder.getDefaultInstance(address))
60                     .setPort(new PortNumber(Uint16.valueOf(port)))
61                     .setCredentials(new LoginPwBuilder()
62                         .setLoginPassword(new LoginPasswordBuilder()
63                             .setUsername(username)
64                             .setPassword(password)
65                             .build())
66                         .build())
67                     .setTcpOnly(tcpOnly)
68                     .setReconnectOnChangedSchema(reconnectOnSchemaChange)
69                     .build())
70                 .build();
71
72         final InstanceIdentifier<Node> nodePath = TOPOLOGY_PATH.child(Node.class, nodeKey);
73         final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
74         transaction.put(LogicalDatastoreType.CONFIGURATION, nodePath, node);
75         transaction.commit().addCallback(new FutureCallback<CommitInfo>() {
76             @Override
77             public void onSuccess(final CommitInfo result) {
78                 LOG.debug("Node {} was successfully added to the topology", instanceName);
79             }
80
81             @Override
82             public void onFailure(final Throwable throwable) {
83                 LOG.error("Node {} creation failed", instanceName, throwable);
84             }
85         }, MoreExecutors.directExecutor());
86         return node;
87     }
88 }