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;
40 public RemoteDeviceId(final ModuleIdentifier identifier, InetSocketAddress address) {
41 this(Preconditions.checkNotNull(identifier).getInstanceName());
42 this.address = address;
43 this.host = buildHost();
46 private RemoteDeviceId(final String name) {
47 this.name = Preconditions.checkNotNull(name);
48 this.key = new NodeKey(new NodeId(name));
49 this.path = createBIPath(name);
50 this.bindingPath = createBindingPath(key);
51 this.topologyPath = createBIPathForTopology(name);
52 this.topologyBindingPath = createBindingPathForTopology(key);
55 public RemoteDeviceId(final String name, InetSocketAddress address) {
57 this.address = address;
58 this.host = buildHost();
61 private static InstanceIdentifier<Node> createBindingPath(final NodeKey key) {
62 return InstanceIdentifier.builder(Nodes.class).child(Node.class, key).build();
65 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPath(final String name) {
66 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
67 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
68 builder.node(Nodes.QNAME).node(Node.QNAME).nodeWithKey(Node.QNAME, QName.create(Node.QNAME.getNamespace(), Node.QNAME.getRevision(), "id"), name);
70 return builder.build();
73 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) {
74 final InstanceIdentifier<NetworkTopology> networkTopology = InstanceIdentifier.builder(NetworkTopology.class).build();
75 final KeyedInstanceIdentifier<Topology, TopologyKey> topology = networkTopology.child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
77 .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class,
78 new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey
79 (new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId(key.getId().getValue())));
82 private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBIPathForTopology(final String name) {
83 final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder builder =
84 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder();
86 .node(NetworkTopology.QNAME)
88 .nodeWithKey(Topology.QNAME, QName.create(Topology.QNAME, "topology-id"), TopologyNetconf.QNAME.getLocalName())
89 .node(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME)
90 .nodeWithKey(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME,
91 QName.create(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME, "node-id"), name);
92 return builder.build();
95 private Host buildHost() {
96 return HostBuilder.getDefaultInstance(address.getHostString());
99 public String getName() {
103 public InstanceIdentifier<Node> getBindingPath() {
107 public org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier getPath() {
111 public NodeKey getBindingKey() {
115 public InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> getTopologyBindingPath() {
116 return topologyBindingPath;
119 public YangInstanceIdentifier getTopologyPath() {
123 public InetSocketAddress getAddress() {
127 public Host getHost() {
132 public String toString() {
133 return "RemoteDevice{" + name +'}';
137 public boolean equals(final Object o) {
141 if (!(o instanceof RemoteDeviceId)) {
145 final RemoteDeviceId that = (RemoteDeviceId) o;
147 if (!name.equals(that.name)) {
150 if (!bindingPath.equals(that.bindingPath)) {
158 public int hashCode() {
159 int result = name.hashCode();
160 result = 31 * result + bindingPath.hashCode();