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.controller.config.api.ModuleIdentifier;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.HostBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
26 import org.opendaylight.yangtools.yang.common.QName;
27 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
29 public final class RemoteDeviceId {
31 private final String name;
32 private final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier path;
33 private final InstanceIdentifier<Node> bindingPath;
34 private final NodeKey key;
35 private final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier topologyPath;
36 private final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
37 .network.topology.rev131021.network.topology.topology.Node> topologyBindingPath;
38 private InetSocketAddress address;
41 public RemoteDeviceId(final ModuleIdentifier identifier, InetSocketAddress address) {
42 this(Preconditions.checkNotNull(identifier).getInstanceName());
43 this.address = address;
44 this.host = buildHost();
47 private RemoteDeviceId(final String name) {
48 this.name = Preconditions.checkNotNull(name);
49 this.key = new NodeKey(new NodeId(name));
50 this.path = createBIPath(name);
51 this.bindingPath = createBindingPath(key);
52 this.topologyPath = createBIPathForTopology(name);
53 this.topologyBindingPath = createBindingPathForTopology(key);
56 public RemoteDeviceId(final String name, InetSocketAddress address) {
58 this.address = address;
59 this.host = buildHost();
62 private static InstanceIdentifier<Node> createBindingPath(final NodeKey key) {
63 return InstanceIdentifier.builder(Nodes.class).child(Node.class, key).build();
66 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPath(final String name) {
67 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
68 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
69 builder.node(Nodes.QNAME).node(Node.QNAME)
70 .nodeWithKey(Node.QNAME, QName.create(Node.QNAME.getNamespace(), Node.QNAME.getRevision(), "id"), name);
72 return builder.build();
75 private static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network
76 .topology.rev131021.network.topology.topology.Node> createBindingPathForTopology(final NodeKey key) {
77 final InstanceIdentifier<NetworkTopology> networkTopology =
78 InstanceIdentifier.builder(NetworkTopology.class).build();
79 final KeyedInstanceIdentifier<Topology, TopologyKey> topology = networkTopology
80 .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
82 .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
83 .network.topology.rev131021.network.topology.topology.Node.class,
84 new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network
85 .topology.topology.NodeKey(new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
86 .network.topology.rev131021.NodeId(key.getId().getValue())));
89 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPathForTopology(
91 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
92 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
94 .node(NetworkTopology.QNAME)
96 .nodeWithKey(Topology.QNAME, QName.create(Topology.QNAME, "topology-id"),
97 TopologyNetconf.QNAME.getLocalName())
98 .node(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
99 .network.topology.rev131021.network.topology.topology.Node.QNAME)
100 .nodeWithKey(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
101 .network.topology.rev131021.network.topology.topology.Node.QNAME,
102 QName.create(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
103 .network.topology.rev131021.network.topology.topology.Node.QNAME, "node-id"), name);
104 return builder.build();
107 private Host buildHost() {
108 return HostBuilder.getDefaultInstance(address.getHostString());
111 public String getName() {
115 public InstanceIdentifier<Node> getBindingPath() {
119 public org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier getPath() {
123 public NodeKey getBindingKey() {
127 public InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang
128 .network.topology.rev131021.network.topology.topology.Node> getTopologyBindingPath() {
129 return topologyBindingPath;
132 public YangInstanceIdentifier getTopologyPath() {
136 public InetSocketAddress getAddress() {
140 public Host getHost() {
145 public String toString() {
146 return "RemoteDevice{" + name + '}';
150 public boolean equals(final Object obj) {
154 if (!(obj instanceof RemoteDeviceId)) {
158 final RemoteDeviceId that = (RemoteDeviceId) obj;
160 if (!name.equals(that.name)) {
163 return bindingPath.equals(that.bindingPath);
167 public int hashCode() {
168 int result = name.hashCode();
169 result = 31 * result + bindingPath.hashCode();