Merge "Bug 1073: Implemented Transaction chain on InMemoryDOMDataStore level."
[controller.git] / opendaylight / md-sal / sal-netconf-connector / src / main / java / org / opendaylight / controller / sal / connect / util / RemoteDeviceId.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.sal.connect.util;
9
10 import org.opendaylight.controller.config.api.ModuleIdentifier;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
15 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
16
17 import com.google.common.base.Preconditions;
18 import org.opendaylight.yangtools.yang.common.QName;
19
20 public class RemoteDeviceId {
21
22     private final String name;
23     private final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier path;
24     private final InstanceIdentifier<Node> bindingPath;
25     private final NodeKey key;
26
27     public RemoteDeviceId(final ModuleIdentifier identifier) {
28         this(Preconditions.checkNotNull(identifier).getInstanceName());
29     }
30
31     public RemoteDeviceId(final String name) {
32         Preconditions.checkNotNull(name);
33         this.name = name;
34         this.key = new NodeKey(new NodeId(name));
35         this.path = createBIPath(name);
36         this.bindingPath = createBindingPath(key);
37     }
38
39     private static InstanceIdentifier<Node> createBindingPath(final NodeKey key) {
40         return InstanceIdentifier.builder(Nodes.class).child(Node.class, key).build();
41     }
42
43     private static org.opendaylight.yangtools.yang.data.api.InstanceIdentifier createBIPath(final String name) {
44         final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.InstanceIdentifierBuilder builder =
45                 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder();
46         builder.node(Nodes.QNAME).nodeWithKey(Node.QNAME, QName.create(Node.QNAME.getNamespace(), Node.QNAME.getRevision(), "id"), name);
47
48         return builder.build();
49     }
50
51     public String getName() {
52         return name;
53     }
54
55     public InstanceIdentifier<Node> getBindingPath() {
56         return bindingPath;
57     }
58
59     public org.opendaylight.yangtools.yang.data.api.InstanceIdentifier getPath() {
60         return path;
61     }
62
63     public NodeKey getBindingKey() {
64         return key;
65     }
66
67     @Override
68     public String toString() {
69         return "RemoteDevice{" + name +'}';
70     }
71
72     @Override
73     public boolean equals(final Object o) {
74         if (this == o) return true;
75         if (!(o instanceof RemoteDeviceId)) return false;
76
77         final RemoteDeviceId that = (RemoteDeviceId) o;
78
79         if (!name.equals(that.name)) return false;
80         if (!bindingPath.equals(that.bindingPath)) return false;
81
82         return true;
83     }
84
85     @Override
86     public int hashCode() {
87         int result = name.hashCode();
88         result = 31 * result + bindingPath.hashCode();
89         return result;
90     }
91 }