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.sal.connect.util;
10 import com.google.common.base.Preconditions;
11 import java.net.InetSocketAddress;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.HostBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
19 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
23 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
24 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
25 import org.opendaylight.yangtools.yang.common.QName;
26 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
28 public final class RemoteDeviceId {
30 private final String name;
31 private final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier path;
32 private final InstanceIdentifier<Node> bindingPath;
33 private final NodeKey key;
34 private final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier topologyPath;
35 private final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
36 .network.topology.rev131021.network.topology.topology.Node> topologyBindingPath;
37 private InetSocketAddress address;
40 private RemoteDeviceId(final String name) {
41 this.name = Preconditions.checkNotNull(name);
42 this.key = new NodeKey(new NodeId(name));
43 this.path = createBIPath(name);
44 this.bindingPath = createBindingPath(key);
45 this.topologyPath = createBIPathForTopology(name);
46 this.topologyBindingPath = createBindingPathForTopology(key);
49 public RemoteDeviceId(final String name, InetSocketAddress address) {
51 this.address = address;
52 this.host = buildHost();
55 private static InstanceIdentifier<Node> createBindingPath(final NodeKey key) {
56 return InstanceIdentifier.builder(Nodes.class).child(Node.class, key).build();
59 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPath(final String name) {
60 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
61 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
62 builder.node(Nodes.QNAME).node(Node.QNAME)
63 .nodeWithKey(Node.QNAME, QName.create(Node.QNAME.getNamespace(), Node.QNAME.getRevision(), "id"), name);
65 return builder.build();
68 private static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network
69 .topology.rev131021.network.topology.topology.Node> createBindingPathForTopology(final NodeKey key) {
70 final InstanceIdentifier<NetworkTopology> networkTopology =
71 InstanceIdentifier.builder(NetworkTopology.class).build();
72 final KeyedInstanceIdentifier<Topology, TopologyKey> topology = networkTopology
73 .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
75 .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
76 .network.topology.rev131021.network.topology.topology.Node.class,
77 new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network
78 .topology.topology.NodeKey(new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
79 .network.topology.rev131021.NodeId(key.getId().getValue())));
82 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPathForTopology(
84 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
85 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
87 .node(NetworkTopology.QNAME)
89 .nodeWithKey(Topology.QNAME, QName.create(Topology.QNAME, "topology-id"),
90 TopologyNetconf.QNAME.getLocalName())
91 .node(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
92 .network.topology.rev131021.network.topology.topology.Node.QNAME)
93 .nodeWithKey(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
94 .network.topology.rev131021.network.topology.topology.Node.QNAME,
95 QName.create(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
96 .network.topology.rev131021.network.topology.topology.Node.QNAME, "node-id"), name);
97 return builder.build();
100 private Host buildHost() {
101 return HostBuilder.getDefaultInstance(address.getHostString());
104 public String getName() {
108 public InstanceIdentifier<Node> getBindingPath() {
112 public org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier getPath() {
116 public NodeKey getBindingKey() {
120 public InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
121 .network.topology.rev131021.network.topology.topology.Node> getTopologyBindingPath() {
122 return topologyBindingPath;
125 public YangInstanceIdentifier getTopologyPath() {
129 public InetSocketAddress getAddress() {
133 public Host getHost() {
138 public String toString() {
139 return "RemoteDevice{" + name + '}';
143 public boolean equals(final Object obj) {
147 if (!(obj instanceof RemoteDeviceId)) {
151 final RemoteDeviceId that = (RemoteDeviceId) obj;
153 if (!name.equals(that.name)) {
156 return bindingPath.equals(that.bindingPath);
160 public int hashCode() {
161 int result = name.hashCode();
162 result = 31 * result + bindingPath.hashCode();