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.controller.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.rev100924.Host;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.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.network.topology.rev131021.network.topology.topology.Node> topologyBindingPath;
37 private InetSocketAddress address;
41 public RemoteDeviceId(final ModuleIdentifier identifier) {
42 this(Preconditions.checkNotNull(identifier).getInstanceName());
45 public RemoteDeviceId(final ModuleIdentifier identifier, Host host) {
50 public RemoteDeviceId(final ModuleIdentifier identifier, InetSocketAddress address) {
52 this.address = address;
53 this.host = buildHost();
57 public RemoteDeviceId(final String name) {
58 Preconditions.checkNotNull(name);
60 this.key = new NodeKey(new NodeId(name));
61 this.path = createBIPath(name);
62 this.bindingPath = createBindingPath(key);
63 this.topologyPath = createBIPathForTopology(name);
64 this.topologyBindingPath = createBindingPathForTopology(key);
67 public RemoteDeviceId(final String name, InetSocketAddress address) {
69 this.address = address;
70 this.host = buildHost();
73 private static InstanceIdentifier<Node> createBindingPath(final NodeKey key) {
74 return InstanceIdentifier.builder(Nodes.class).child(Node.class, key).build();
77 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPath(final String name) {
78 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
79 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
80 builder.node(Nodes.QNAME).nodeWithKey(Node.QNAME, QName.create(Node.QNAME.getNamespace(), Node.QNAME.getRevision(), "id"), name);
82 return builder.build();
85 private static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> createBindingPathForTopology(final NodeKey key) {
86 final InstanceIdentifier<NetworkTopology> networkTopology = InstanceIdentifier.builder(NetworkTopology.class).build();
87 final KeyedInstanceIdentifier<Topology, TopologyKey> topology = networkTopology.child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
89 .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class,
90 new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey
91 (new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId(key.getId().getValue())));
94 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPathForTopology(final String name) {
95 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
96 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
98 .node(NetworkTopology.QNAME)
99 .nodeWithKey(Topology.QNAME, QName.create(Topology.QNAME, "topology-id"), TopologyNetconf.QNAME.getLocalName())
100 .nodeWithKey(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME,
101 QName.create(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME, "node-id"), name);
102 return builder.build();
105 private Host buildHost() {
106 return address.getAddress().getHostAddress() != null
107 ? HostBuilder.getDefaultInstance(address.getAddress().getHostAddress())
108 : HostBuilder.getDefaultInstance(address.getAddress().getHostName());
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.network.topology.rev131021.network.topology.topology.Node> getTopologyBindingPath() {
128 return topologyBindingPath;
131 public YangInstanceIdentifier getTopologyPath() {
135 public InetSocketAddress getAddress() {
139 public Host getHost() {
144 public String toString() {
145 return "RemoteDevice{" + name +'}';
149 public boolean equals(final Object o) {
153 if (!(o instanceof RemoteDeviceId)) {
157 final RemoteDeviceId that = (RemoteDeviceId) o;
159 if (!name.equals(that.name)) {
162 if (!bindingPath.equals(that.bindingPath)) {
170 public int hashCode() {
171 int result = name.hashCode();
172 result = 31 * result + bindingPath.hashCode();