Bug 4105: Add general-entities yang model 02/26802/1
authorTom Pantelis <tpanteli@brocade.com>
Wed, 12 Aug 2015 04:57:45 +0000 (00:57 -0400)
committerTom Pantelis <tpanteli@brocade.com>
Thu, 10 Sep 2015 19:18:32 +0000 (15:18 -0400)
Added a general-entities yang model tha can be used to represent an
entity ID when no existing yang schema exists.

Change-Id: Iec815966fe21ec15cb78ff47c68cda0aa7ae8504
Signed-off-by: Tom Pantelis <tpanteli@brocade.com>
opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/clustering/Entity.java
opendaylight/md-sal/sal-common-api/src/main/yang/general-entity.yang [new file with mode: 0644]

index 93d0012..35f23a4 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.controller.md.sal.common.api.clustering;
 import com.google.common.base.Preconditions;
 import java.io.Serializable;
 import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 /**
@@ -29,17 +30,25 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
  * <p>
  * The identifier is a YangInstanceIdentifier. The reason for the choice of YangInstanceIdentifier is because it
  * can easily be used to represent a data node. For example an inventory node represents a shared entity and it is best
- * referenced by the YangInstanceIdentifier if the inventory node stored in the data store.
+ * referenced by the YangInstanceIdentifier if the inventory node is stored in the data store.
+ * </p>
+ * Note that an entity identifier must conform to a valid yang schema. If there is no existing yang schema to
+ * represent an entity, the general-entity yang model can be used.
+ * <p>
  * </p>
  */
 public final class Entity implements Serializable {
     private static final long serialVersionUID = 1L;
 
+    private static final QName ENTITY_QNAME =
+        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.core.general.entity.rev150820.Entity.QNAME;
+    private static final QName ENTITY_NAME = QName.create(ENTITY_QNAME, "name");
+
     private final String type;
     private final YangInstanceIdentifier id;
 
     /**
-     * Construct a new Entity
+     * Construct an Entity with a YangInstanceIdentifier.
      *
      * @param type the type of the entity
      * @param id the identifier of the entity
@@ -49,6 +58,19 @@ public final class Entity implements Serializable {
         this.id = Preconditions.checkNotNull(id, "id should not be null");
     }
 
+    /**
+     * Construct an Entity with an with a name. The general-entity schema is used to construct the
+     * YangInstanceIdentifier.
+     *
+     * @param type the type of the entity
+     * @param entityName the name of the entity used to construct a general-entity YangInstanceIdentifier
+     */
+    public Entity(@Nonnull String type, @Nonnull String entityName) {
+        this.type = Preconditions.checkNotNull(type, "type should not be null");
+        this.id = YangInstanceIdentifier.builder().node(ENTITY_QNAME).nodeWithKey(ENTITY_QNAME, ENTITY_NAME,
+                        Preconditions.checkNotNull(entityName, "entityName should not be null")).build();
+    }
+
     /**
      *
      * @return id of entity
diff --git a/opendaylight/md-sal/sal-common-api/src/main/yang/general-entity.yang b/opendaylight/md-sal/sal-common-api/src/main/yang/general-entity.yang
new file mode 100644 (file)
index 0000000..ce21e25
--- /dev/null
@@ -0,0 +1,17 @@
+module general-entity {
+    namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:general-entity";
+    prefix "general-entity";
+
+    description "Defines a model to describe a general entity whose path can be used as an ID for an entity that isn't otherwise modelled";
+    
+    revision 2015-08-20 {
+        description "Initial revision";
+    }
+
+    list entity {
+        key name;
+        leaf name {
+            type string;
+        }
+    }
+}
\ No newline at end of file