c97fe51d363dc39dc6d71365e410c1861a6a127f
[controller.git] / opendaylight / md-sal / sal-common-api / src / main / java / org / opendaylight / controller / md / sal / common / api / clustering / Entity.java
1 /*
2  * Copyright (c) 2015 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
9 package org.opendaylight.controller.md.sal.common.api.clustering;
10
11 import com.google.common.base.Preconditions;
12 import java.io.Serializable;
13 import javax.annotation.Nonnull;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
16
17 /**
18  * A clustered Entity is something which is shared by multiple applications across a cluster. An Entity has a type
19  * and an identifier.
20  *
21  * <p>
22  * The type describes the type of the Entity where examples of a type maybe "openflow" or "netconf"
23  * etc. An Entity type could be tied to how exactly an application shares and "owns" an entity. For example we may want
24  * an application which deals with the openflow entity to be assigned ownership of that entity based on a first come
25  * first served basis. On the other hand for netconf entity types we may want applications to gain ownership based on
26  * a load balancing approach. While this mechanism of assigning a ownership acquisition strategy is not finalized the
27  * intention is that the entity type will play a role in determining the strategy and thus should be put in place.
28  *
29  * <p>
30  * The identifier is a YangInstanceIdentifier. The reason for the choice of YangInstanceIdentifier is because it
31  * can easily be used to represent a data node. For example an inventory node represents a shared entity and it is best
32  * referenced by the YangInstanceIdentifier if the inventory node is stored in the data store.
33  *
34  * <p>
35  * Note that an entity identifier must conform to a valid yang schema. If there is no existing yang schema to
36  * represent an entity, the general-entity yang model can be used.
37  *
38  * @deprecated Use org.opendaylight.mdsal.binding.api.clustering.Entity or
39  *             org.opendaylight.mdsal.eos.dom.api.DOMEntity instead
40  */
41 @Deprecated
42 public final class Entity implements Serializable {
43     private static final long serialVersionUID = 1L;
44
45     private static final QName ENTITY_QNAME = org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
46             .controller.md.sal.core.general.entity.rev150820.Entity.QNAME;
47     private static final QName ENTITY_NAME = QName.create(ENTITY_QNAME, "name");
48
49     private final String type;
50     private final YangInstanceIdentifier id;
51
52     /**
53      * Construct an Entity with a YangInstanceIdentifier.
54      *
55      * @param type the type of the entity
56      * @param id the identifier of the entity
57      */
58     public Entity(@Nonnull String type, @Nonnull YangInstanceIdentifier id) {
59         this.type = Preconditions.checkNotNull(type, "type should not be null");
60         this.id = Preconditions.checkNotNull(id, "id should not be null");
61     }
62
63     /**
64      * Construct an Entity with an with a name. The general-entity schema is used to construct the
65      * YangInstanceIdentifier.
66      *
67      * @param type the type of the entity
68      * @param entityName the name of the entity used to construct a general-entity YangInstanceIdentifier
69      */
70     public Entity(@Nonnull String type, @Nonnull String entityName) {
71         this.type = Preconditions.checkNotNull(type, "type should not be null");
72         this.id = YangInstanceIdentifier.builder().node(ENTITY_QNAME).nodeWithKey(ENTITY_QNAME, ENTITY_NAME,
73                         Preconditions.checkNotNull(entityName, "entityName should not be null")).build();
74     }
75
76     /**
77      * Returns the id of entity.
78      */
79     @Nonnull
80     public YangInstanceIdentifier getId() {
81         return id;
82     }
83
84     /**
85      * Returns the type of entity.
86      */
87     @Nonnull
88     public String getType() {
89         return type;
90     }
91
92     @Override
93     public boolean equals(Object obj) {
94         if (this == obj) {
95             return true;
96         }
97
98         if (obj == null || getClass() != obj.getClass()) {
99             return false;
100         }
101
102         Entity entity = (Entity) obj;
103
104         if (!id.equals(entity.id)) {
105             return false;
106         }
107
108         if (!type.equals(entity.type)) {
109             return false;
110         }
111
112         return true;
113     }
114
115     @Override
116     public int hashCode() {
117         return 31 * type.hashCode() + id.hashCode();
118     }
119
120     @Override
121     public String toString() {
122         return "Entity{" + "type='" + type + '\'' + ", id=" + id + '}';
123     }
124 }

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.