You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sh...@apache.org on 2016/03/07 07:43:59 UTC

[1/2] incubator-atlas git commit: ATLAS-479 Add description for different types during create time (guptaneeru via shwethags)

Repository: incubator-atlas
Updated Branches:
  refs/heads/master b9575f29d -> b6fb1f1ac


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java
index 4482816..b7ac8f8 100755
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java
+++ b/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java
@@ -220,13 +220,13 @@ public class TraitTest extends HierarchicalTypeTest<TraitType> {
 
     @Override
     protected HierarchicalTypeDefinition<TraitType> getTypeDefinition(String name, AttributeDefinition... attributes) {
-        return new HierarchicalTypeDefinition(TraitType.class, name, null, attributes);
+        return new HierarchicalTypeDefinition(TraitType.class, name, null, null, attributes);
     }
 
     @Override
     protected HierarchicalTypeDefinition<TraitType> getTypeDefinition(String name, ImmutableList<String> superTypes,
                                                                       AttributeDefinition... attributes) {
-        return new HierarchicalTypeDefinition(TraitType.class, name, superTypes, attributes);
+        return new HierarchicalTypeDefinition(TraitType.class, name, null, superTypes, attributes);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TypeSystemTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TypeSystemTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/TypeSystemTest.java
index eb472e9..4ee9f9c 100755
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TypeSystemTest.java
+++ b/typesystem/src/test/java/org/apache/atlas/typesystem/types/TypeSystemTest.java
@@ -27,10 +27,8 @@ import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import scala.actors.threadpool.Arrays;
-
 import java.util.Collections;
 import java.util.List;
-
 import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
 import static org.apache.atlas.typesystem.types.utils.TypesUtil.createRequiredAttrDef;
 import static org.apache.atlas.typesystem.types.utils.TypesUtil.createStructTypeDef;
@@ -56,6 +54,50 @@ public class TypeSystemTest extends BaseTest {
     }
 
     @Test
+    public void testGetTypeDescription() throws Exception {
+        String typeName = "enum_type";
+        String description = "_description";
+        String typeDescription = typeName + description;
+        getTypeSystem().defineEnumType(typeName, typeDescription, new EnumValue("0", 0), new EnumValue("1", 1), new EnumValue("2", 2),
+                new EnumValue("3", 3));
+        Assert.assertTrue(getTypeSystem().getTypeNames().contains(typeName));
+        IDataType type = getTypeSystem().getDataType(EnumType.class, typeName);
+        Assert.assertNotNull(type);
+        Assert.assertEquals(type.getDescription(), typeDescription);
+
+        typeName = "trait_type";
+        typeDescription = typeName + description;
+        HierarchicalTypeDefinition<TraitType> trait = TypesUtil
+            .createTraitTypeDef(typeName, typeDescription, ImmutableList.<String>of(),
+                TypesUtil.createRequiredAttrDef("type", DataTypes.STRING_TYPE));
+        getTypeSystem().defineTraitType(trait);
+        Assert.assertTrue(getTypeSystem().getTypeNames().contains(typeName));
+        type = getTypeSystem().getDataType(TraitType.class, typeName);
+        Assert.assertNotNull(type);
+        Assert.assertEquals(type.getDescription(), typeDescription);
+
+        typeName = "class_type";
+        typeDescription = typeName + description;
+        HierarchicalTypeDefinition<ClassType> classType = TypesUtil
+            .createClassTypeDef(typeName, typeDescription, ImmutableList.<String>of(),
+                TypesUtil.createRequiredAttrDef("type", DataTypes.STRING_TYPE));
+        getTypeSystem().defineClassType(classType);
+        Assert.assertTrue(getTypeSystem().getTypeNames().contains(typeName));
+        type = getTypeSystem().getDataType(ClassType.class, typeName);
+        Assert.assertNotNull(type);
+        Assert.assertEquals(type.getDescription(), typeDescription);
+
+        typeName = "struct_type";
+        typeDescription = typeName + description;
+        getTypeSystem().defineStructType(typeName, typeDescription, true, createRequiredAttrDef("a", DataTypes.INT_TYPE));
+        Assert.assertTrue(getTypeSystem().getTypeNames().contains(typeName));
+        type = getTypeSystem().getDataType(StructType.class, typeName);
+        Assert.assertNotNull(type);
+        Assert.assertEquals(type.getDescription(), typeDescription);
+        
+    }
+
+    @Test
     public void testIsRegistered() throws Exception {
         getTypeSystem().defineEnumType("enum_test", new EnumValue("0", 0), new EnumValue("1", 1), new EnumValue("2", 2),
                 new EnumValue("3", 3));

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/test/scala/org/apache/atlas/typesystem/json/TypesSerializationTest.scala
----------------------------------------------------------------------
diff --git a/typesystem/src/test/scala/org/apache/atlas/typesystem/json/TypesSerializationTest.scala b/typesystem/src/test/scala/org/apache/atlas/typesystem/json/TypesSerializationTest.scala
index 07ffa96..cfd4bdb 100755
--- a/typesystem/src/test/scala/org/apache/atlas/typesystem/json/TypesSerializationTest.scala
+++ b/typesystem/src/test/scala/org/apache/atlas/typesystem/json/TypesSerializationTest.scala
@@ -86,6 +86,11 @@ class TypesSerializationTest extends BaseTest with TypeHelpers {
             new EnumValue("DB", 1),
             new EnumValue("TABLE", 2),
             new EnumValue("PARTITION", 3))
+            
+         ts.defineEnumType("TestType", "TestType-description",
+            new EnumValue("A", 1),
+            new EnumValue("B", 2),
+            new EnumValue("C", 3))
 
         defineClassType(ts, createClassTypeDef("t4", List(),
             requiredAttr("a", DataTypes.INT_TYPE),
@@ -124,8 +129,12 @@ class TypesSerializationTest extends BaseTest with TypeHelpers {
         val securityClearanceTypeDef: HierarchicalTypeDefinition[TraitType] = createTraitTypeDef("SecurityClearance", List(),
             requiredAttr("level", DataTypes.INT_TYPE)
         )
+        
+        val securityClearanceTypeDefWithDesc: HierarchicalTypeDefinition[TraitType] = createTraitTypeDef("SecurityClearance2", Some("SecurityClearance-Description"), List(),
+            requiredAttr("level", DataTypes.INT_TYPE)
+        )
         ts.defineTypes(ImmutableList.of[EnumTypeDefinition], ImmutableList.of[StructTypeDefinition],
-            ImmutableList.of[HierarchicalTypeDefinition[TraitType]](securityClearanceTypeDef),
+            ImmutableList.of[HierarchicalTypeDefinition[TraitType]](securityClearanceTypeDef, securityClearanceTypeDefWithDesc),
             ImmutableList.of[HierarchicalTypeDefinition[ClassType]](deptTypeDef, personTypeDef, managerTypeDef))
 
         val ser = TypesSerialization.toJson(ts, _ => true)
@@ -191,12 +200,32 @@ class TypesSerializationTest extends BaseTest with TypeHelpers {
       optionalAttr("n", DataTypes.arrayTypeName(DataTypes.BIGDECIMAL_TYPE)),
       optionalAttr("o", DataTypes.mapTypeName(DataTypes.STRING_TYPE, DataTypes.DOUBLE_TYPE)))
 
+      val ser = TypesSerialization.toJson(sDef)
+      val typesDef2 = TypesSerialization.fromJson(ser)
 
+      Assert.assertEquals(sDef, typesDef2.structTypes(0))
+    
+      //Now with description
+      val sDef2 = structDef("ts1", Some("ts1-description"), requiredAttr("a", DataTypes.INT_TYPE),
+      optionalAttr("b", DataTypes.BOOLEAN_TYPE),
+      optionalAttr("c", DataTypes.BYTE_TYPE),
+      optionalAttr("d", DataTypes.SHORT_TYPE),
+      optionalAttr("e", DataTypes.INT_TYPE),
+      optionalAttr("f", DataTypes.INT_TYPE),
+      optionalAttr("g", DataTypes.LONG_TYPE),
+      optionalAttr("h", DataTypes.FLOAT_TYPE),
+      optionalAttr("i", DataTypes.DOUBLE_TYPE),
+      optionalAttr("j", DataTypes.BIGINTEGER_TYPE),
+      optionalAttr("k", DataTypes.BIGDECIMAL_TYPE),
+      optionalAttr("l", DataTypes.DATE_TYPE),
+      optionalAttr("m", DataTypes.arrayTypeName(DataTypes.INT_TYPE)),
+      optionalAttr("n", DataTypes.arrayTypeName(DataTypes.BIGDECIMAL_TYPE)),
+      optionalAttr("o", DataTypes.mapTypeName(DataTypes.STRING_TYPE, DataTypes.DOUBLE_TYPE)))
 
-    val ser2 = TypesSerialization.toJson(sDef)
-    val typesDef2 = TypesSerialization.fromJson(ser2)
+      val ser2 = TypesSerialization.toJson(sDef)
+      val typesDef3 = TypesSerialization.fromJson(ser2)
+      Assert.assertEquals(sDef, typesDef3.structTypes(0))
 
-    Assert.assertEquals(sDef, typesDef2.structTypes(0))
   }
 
   @Test def test4 : Unit = {
@@ -212,8 +241,9 @@ class TypesSerializationTest extends BaseTest with TypeHelpers {
       createTraitTypeDef("C", Seq("A"), optionalAttr("c", DataTypes.BYTE_TYPE))
     val D: HierarchicalTypeDefinition[TraitType] =
       createTraitTypeDef("D", Seq("B", "C"), optionalAttr("d", DataTypes.SHORT_TYPE))
-
-    val typDefs = Seq(A,B,C,D)
+    val E: HierarchicalTypeDefinition[TraitType] =
+      createTraitTypeDef("E", Some("E-description"), Seq("B", "C"), optionalAttr("d", DataTypes.SHORT_TYPE))
+    val typDefs = Seq(A,B,C,D,E)
     typDefs.foreach { tDef =>
       val ser2 = TypesSerialization.toJson(tDef, true)
       val typesDef2 = TypesSerialization.fromJson(ser2)
@@ -245,7 +275,12 @@ class TypesSerializationTest extends BaseTest with TypeHelpers {
       new EnumValue("TABLE", 2),
       new EnumValue("PARTITION", 3))
 
-    val typDefs = Seq(e1,e2,e3,e4)
+    val e5 = new EnumTypeDefinition("LockLevel", "LockLevel-description",
+      new EnumValue("DB", 1),
+      new EnumValue("TABLE", 2),
+      new EnumValue("PARTITION", 3))
+    
+    val typDefs = Seq(e1,e2,e3,e4,e5)
     typDefs.foreach { tDef =>
       val ser2 = TypesSerialization.toJson(tDef)
       val typesDef2 = TypesSerialization.fromJson(ser2)
@@ -290,12 +325,18 @@ class TypesSerializationTest extends BaseTest with TypeHelpers {
         Multiplicity.COLLECTION, false, "manager")
     )
 
-    val typDefs = Seq(typDef, deptTypeDef, personTypeDef, managerTypeDef)
+    val managerTypeDefWithDesc: HierarchicalTypeDefinition[ClassType] = createClassTypeDef("Manager", Some("Manager-description"), List("Person"),
+      new AttributeDefinition("subordinates", String.format("array<%s>", "Person"),
+        Multiplicity.COLLECTION, false, "manager")
+    )
+
+    val typDefs = Seq(typDef, deptTypeDef, personTypeDef, managerTypeDef, managerTypeDefWithDesc)
     typDefs.foreach { tDef =>
       val ser2 = TypesSerialization.toJson(tDef, false)
       val typesDef2 = TypesSerialization.fromJson(ser2)
       Assert.assertEquals(tDef, typesDef2.classTypes(0))
 
     }
+
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/webapp/src/main/java/org/apache/atlas/examples/QuickStart.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/examples/QuickStart.java b/webapp/src/main/java/org/apache/atlas/examples/QuickStart.java
index 0a6b7b9..dc5eaae 100755
--- a/webapp/src/main/java/org/apache/atlas/examples/QuickStart.java
+++ b/webapp/src/main/java/org/apache/atlas/examples/QuickStart.java
@@ -128,22 +128,22 @@ public class QuickStart {
 
     TypesDef createTypeDefinitions() throws Exception {
         HierarchicalTypeDefinition<ClassType> dbClsDef = TypesUtil
-                .createClassTypeDef(DATABASE_TYPE, null,
+                .createClassTypeDef(DATABASE_TYPE, DATABASE_TYPE, null,
                         TypesUtil.createUniqueRequiredAttrDef("name", DataTypes.STRING_TYPE),
                         attrDef("description", DataTypes.STRING_TYPE), attrDef("locationUri", DataTypes.STRING_TYPE),
                         attrDef("owner", DataTypes.STRING_TYPE), attrDef("createTime", DataTypes.LONG_TYPE));
 
         HierarchicalTypeDefinition<ClassType> storageDescClsDef = TypesUtil
-                .createClassTypeDef(STORAGE_DESC_TYPE, null, attrDef("location", DataTypes.STRING_TYPE),
+                .createClassTypeDef(STORAGE_DESC_TYPE, STORAGE_DESC_TYPE, null, attrDef("location", DataTypes.STRING_TYPE),
                         attrDef("inputFormat", DataTypes.STRING_TYPE), attrDef("outputFormat", DataTypes.STRING_TYPE),
                         attrDef("compressed", DataTypes.STRING_TYPE, Multiplicity.REQUIRED, false, null));
 
         HierarchicalTypeDefinition<ClassType> columnClsDef = TypesUtil
-                .createClassTypeDef(COLUMN_TYPE, null, attrDef("name", DataTypes.STRING_TYPE),
+                .createClassTypeDef(COLUMN_TYPE, COLUMN_TYPE, null, attrDef("name", DataTypes.STRING_TYPE),
                         attrDef("dataType", DataTypes.STRING_TYPE), attrDef("comment", DataTypes.STRING_TYPE));
 
         HierarchicalTypeDefinition<ClassType> tblClsDef = TypesUtil
-                .createClassTypeDef(TABLE_TYPE, ImmutableList.of("DataSet"),
+                .createClassTypeDef(TABLE_TYPE, TABLE_TYPE, ImmutableList.of("DataSet"),
                         new AttributeDefinition(DB_ATTRIBUTE, DATABASE_TYPE, Multiplicity.REQUIRED, false, null),
                         new AttributeDefinition("sd", STORAGE_DESC_TYPE, Multiplicity.REQUIRED, true, null),
                         attrDef("owner", DataTypes.STRING_TYPE), attrDef("createTime", DataTypes.LONG_TYPE),
@@ -155,7 +155,7 @@ public class QuickStart {
                                 Multiplicity.COLLECTION, true, null));
 
         HierarchicalTypeDefinition<ClassType> loadProcessClsDef = TypesUtil
-                .createClassTypeDef(LOAD_PROCESS_TYPE, ImmutableList.of("Process"),
+                .createClassTypeDef(LOAD_PROCESS_TYPE, LOAD_PROCESS_TYPE, ImmutableList.of("Process"),
                         attrDef("userName", DataTypes.STRING_TYPE), attrDef("startTime", DataTypes.LONG_TYPE),
                         attrDef("endTime", DataTypes.LONG_TYPE),
                         attrDef("queryText", DataTypes.STRING_TYPE, Multiplicity.REQUIRED),
@@ -164,25 +164,25 @@ public class QuickStart {
                         attrDef("queryGraph", DataTypes.STRING_TYPE, Multiplicity.REQUIRED));
 
         HierarchicalTypeDefinition<ClassType> viewClsDef = TypesUtil
-                .createClassTypeDef(VIEW_TYPE, null,
+                .createClassTypeDef(VIEW_TYPE, VIEW_TYPE, null,
                         TypesUtil.createUniqueRequiredAttrDef("name", DataTypes.STRING_TYPE),
                         new AttributeDefinition("db", DATABASE_TYPE, Multiplicity.REQUIRED, false, null),
                         new AttributeDefinition("inputTables", DataTypes.arrayTypeName(TABLE_TYPE),
                                 Multiplicity.COLLECTION, false, null));
 
-        HierarchicalTypeDefinition<TraitType> dimTraitDef = TypesUtil.createTraitTypeDef("Dimension", null);
+        HierarchicalTypeDefinition<TraitType> dimTraitDef = TypesUtil.createTraitTypeDef("Dimension",  "Dimension Trait", null);
 
-        HierarchicalTypeDefinition<TraitType> factTraitDef = TypesUtil.createTraitTypeDef("Fact", null);
+        HierarchicalTypeDefinition<TraitType> factTraitDef = TypesUtil.createTraitTypeDef("Fact", "Fact Trait", null);
 
-        HierarchicalTypeDefinition<TraitType> piiTraitDef = TypesUtil.createTraitTypeDef("PII", null);
+        HierarchicalTypeDefinition<TraitType> piiTraitDef = TypesUtil.createTraitTypeDef("PII", "PII Trait", null);
 
-        HierarchicalTypeDefinition<TraitType> metricTraitDef = TypesUtil.createTraitTypeDef("Metric", null);
+        HierarchicalTypeDefinition<TraitType> metricTraitDef = TypesUtil.createTraitTypeDef("Metric", "Metric Trait", null);
 
-        HierarchicalTypeDefinition<TraitType> etlTraitDef = TypesUtil.createTraitTypeDef("ETL", null);
+        HierarchicalTypeDefinition<TraitType> etlTraitDef = TypesUtil.createTraitTypeDef("ETL", "ETL Trait", null);
 
-        HierarchicalTypeDefinition<TraitType> jdbcTraitDef = TypesUtil.createTraitTypeDef("JdbcAccess", null);
+        HierarchicalTypeDefinition<TraitType> jdbcTraitDef = TypesUtil.createTraitTypeDef("JdbcAccess", "JdbcAccess Trait", null);
 
-        HierarchicalTypeDefinition<TraitType> logTraitDef = TypesUtil.createTraitTypeDef("Log Data", null);
+        HierarchicalTypeDefinition<TraitType> logTraitDef = TypesUtil.createTraitTypeDef("Log Data", "LogData Trait",  null);
 
         return TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
                 ImmutableList.of(dimTraitDef, factTraitDef, piiTraitDef, metricTraitDef, etlTraitDef, jdbcTraitDef, logTraitDef),


[2/2] incubator-atlas git commit: ATLAS-479 Add description for different types during create time (guptaneeru via shwethags)

Posted by sh...@apache.org.
ATLAS-479 Add description for different types during create time (guptaneeru via shwethags)


Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/b6fb1f1a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/b6fb1f1a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/b6fb1f1a

Branch: refs/heads/master
Commit: b6fb1f1ac27f19e1b077f14d47c88548ae2df106
Parents: b9575f2
Author: Shwetha GS <ss...@hortonworks.com>
Authored: Mon Mar 7 12:13:51 2016 +0530
Committer: Shwetha GS <ss...@hortonworks.com>
Committed: Mon Mar 7 12:13:51 2016 +0530

----------------------------------------------------------------------
 .../falcon/model/FalconDataModelGenerator.java  |  2 +-
 .../hive/model/HiveDataModelGenerator.java      | 16 ++--
 .../sqoop/model/SqoopDataModelGenerator.java    |  4 +-
 release-log.txt                                 |  1 +
 .../org/apache/atlas/repository/Constants.java  |  1 +
 .../typestore/GraphBackedTypeStore.java         | 43 ++++++---
 .../apache/atlas/BaseHiveRepositoryTest.java    |  2 +-
 .../test/java/org/apache/atlas/TestUtils.java   | 35 ++++----
 .../typestore/GraphBackedTypeStoreTest.java     | 12 ++-
 .../service/DefaultMetadataServiceTest.java     |  1 -
 .../apache/atlas/query/QueryTestsUtils.scala    | 24 ++---
 .../typesystem/types/AbstractDataType.java      | 21 +++++
 .../atlas/typesystem/types/ClassType.java       | 12 ++-
 .../atlas/typesystem/types/DataTypes.java       | 93 +++++---------------
 .../apache/atlas/typesystem/types/EnumType.java | 13 ++-
 .../typesystem/types/EnumTypeDefinition.java    |  6 ++
 .../typesystem/types/HierarchicalType.java      | 23 ++---
 .../types/HierarchicalTypeDefinition.java       | 11 +--
 .../atlas/typesystem/types/IDataType.java       |  2 +
 .../atlas/typesystem/types/StructType.java      | 26 ++----
 .../typesystem/types/StructTypeDefinition.java  | 13 ++-
 .../atlas/typesystem/types/TraitType.java       | 11 +--
 .../atlas/typesystem/types/TypeSystem.java      | 31 ++++---
 .../atlas/typesystem/types/utils/TypesUtil.java | 20 ++++-
 .../typesystem/json/TypesSerialization.scala    | 31 +++++--
 .../atlas/typesystem/types/ClassTest.java       | 31 ++++++-
 .../atlas/typesystem/types/TraitTest.java       |  4 +-
 .../atlas/typesystem/types/TypeSystemTest.java  | 46 +++++++++-
 .../json/TypesSerializationTest.scala           | 57 ++++++++++--
 .../org/apache/atlas/examples/QuickStart.java   | 26 +++---
 30 files changed, 382 insertions(+), 236 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/addons/falcon-bridge/src/main/java/org/apache/atlas/falcon/model/FalconDataModelGenerator.java
----------------------------------------------------------------------
diff --git a/addons/falcon-bridge/src/main/java/org/apache/atlas/falcon/model/FalconDataModelGenerator.java b/addons/falcon-bridge/src/main/java/org/apache/atlas/falcon/model/FalconDataModelGenerator.java
index ac9dd85..a68db2f 100644
--- a/addons/falcon-bridge/src/main/java/org/apache/atlas/falcon/model/FalconDataModelGenerator.java
+++ b/addons/falcon-bridge/src/main/java/org/apache/atlas/falcon/model/FalconDataModelGenerator.java
@@ -115,7 +115,7 @@ public class FalconDataModelGenerator {
                         Multiplicity.OPTIONAL, false, null),};
 
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, FalconDataTypes.FALCON_PROCESS_ENTITY.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, FalconDataTypes.FALCON_PROCESS_ENTITY.getName(), null,
                         ImmutableList.of(AtlasClient.PROCESS_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(FalconDataTypes.FALCON_PROCESS_ENTITY.getName(), definition);
         LOG.debug("Created definition for {}", FalconDataTypes.FALCON_PROCESS_ENTITY.getName());

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/addons/hive-bridge/src/main/java/org/apache/atlas/hive/model/HiveDataModelGenerator.java
----------------------------------------------------------------------
diff --git a/addons/hive-bridge/src/main/java/org/apache/atlas/hive/model/HiveDataModelGenerator.java b/addons/hive-bridge/src/main/java/org/apache/atlas/hive/model/HiveDataModelGenerator.java
index 94ca7a4..a63c7cc 100755
--- a/addons/hive-bridge/src/main/java/org/apache/atlas/hive/model/HiveDataModelGenerator.java
+++ b/addons/hive-bridge/src/main/java/org/apache/atlas/hive/model/HiveDataModelGenerator.java
@@ -201,7 +201,7 @@ public class HiveDataModelGenerator {
                         Multiplicity.OPTIONAL, false, null),};
 
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_STORAGEDESC.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_STORAGEDESC.getName(), null,
                         ImmutableList.of(AtlasClient.REFERENCEABLE_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(HiveDataTypes.HIVE_STORAGEDESC.getName(), definition);
         LOG.debug("Created definition for " + HiveDataTypes.HIVE_STORAGEDESC.getName());
@@ -236,7 +236,7 @@ public class HiveDataModelGenerator {
                         false, null),};
 
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_DB.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_DB.getName(), null,
                         ImmutableList.of(AtlasClient.REFERENCEABLE_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(HiveDataTypes.HIVE_DB.getName(), definition);
         LOG.debug("Created definition for " + HiveDataTypes.HIVE_DB.getName());
@@ -250,7 +250,7 @@ public class HiveDataModelGenerator {
                 new AttributeDefinition("fields", String.format("array<%s>", HiveDataTypes.HIVE_COLUMN.getName()),
                         Multiplicity.OPTIONAL, false, null),};
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_TYPE.getName(), null,
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_TYPE.getName(), null, null,
                         attributeDefinitions);
 
         classTypeDefinitions.put(HiveDataTypes.HIVE_TYPE.getName(), definition);
@@ -263,7 +263,7 @@ public class HiveDataModelGenerator {
                 new AttributeDefinition("type", DataTypes.STRING_TYPE.getName(), Multiplicity.REQUIRED, false, null),
                 new AttributeDefinition(COMMENT, DataTypes.STRING_TYPE.getName(), Multiplicity.OPTIONAL, false, null),};
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_COLUMN.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_COLUMN.getName(), null,
                         ImmutableList.of(AtlasClient.REFERENCEABLE_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(HiveDataTypes.HIVE_COLUMN.getName(), definition);
         LOG.debug("Created definition for " + HiveDataTypes.HIVE_COLUMN.getName());
@@ -284,7 +284,7 @@ public class HiveDataModelGenerator {
                         Multiplicity.OPTIONAL, true, null),
                 new AttributeDefinition("parameters", STRING_MAP_TYPE.getName(), Multiplicity.OPTIONAL, false, null),};
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_PARTITION.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_PARTITION.getName(), null,
                         ImmutableList.of(AtlasClient.REFERENCEABLE_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(HiveDataTypes.HIVE_PARTITION.getName(), definition);
         LOG.debug("Created definition for " + HiveDataTypes.HIVE_PARTITION.getName());
@@ -318,7 +318,7 @@ public class HiveDataModelGenerator {
                 new AttributeDefinition("temporary", DataTypes.BOOLEAN_TYPE.getName(), Multiplicity.OPTIONAL, false,
                         null),};
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_TABLE.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_TABLE.getName(), null,
                         ImmutableList.of("DataSet"), attributeDefinitions);
         classTypeDefinitions.put(HiveDataTypes.HIVE_TABLE.getName(), definition);
         LOG.debug("Created definition for " + HiveDataTypes.HIVE_TABLE.getName());
@@ -333,7 +333,7 @@ public class HiveDataModelGenerator {
                 new AttributeDefinition("ownerName", DataTypes.STRING_TYPE.getName(), Multiplicity.REQUIRED, false,
                         null),};
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_ROLE.getName(), null,
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_ROLE.getName(), null, null,
                         attributeDefinitions);
 
         classTypeDefinitions.put(HiveDataTypes.HIVE_ROLE.getName(), definition);
@@ -357,7 +357,7 @@ public class HiveDataModelGenerator {
                         null),};
 
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_PROCESS.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, HiveDataTypes.HIVE_PROCESS.getName(), null,
                         ImmutableList.of(AtlasClient.PROCESS_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(HiveDataTypes.HIVE_PROCESS.getName(), definition);
         LOG.debug("Created definition for " + HiveDataTypes.HIVE_PROCESS.getName());

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/addons/sqoop-bridge/src/main/java/org/apache/atlas/sqoop/model/SqoopDataModelGenerator.java
----------------------------------------------------------------------
diff --git a/addons/sqoop-bridge/src/main/java/org/apache/atlas/sqoop/model/SqoopDataModelGenerator.java b/addons/sqoop-bridge/src/main/java/org/apache/atlas/sqoop/model/SqoopDataModelGenerator.java
index 342c07f..989469f 100644
--- a/addons/sqoop-bridge/src/main/java/org/apache/atlas/sqoop/model/SqoopDataModelGenerator.java
+++ b/addons/sqoop-bridge/src/main/java/org/apache/atlas/sqoop/model/SqoopDataModelGenerator.java
@@ -129,7 +129,7 @@ public class SqoopDataModelGenerator {
                         DataTypes.STRING_TYPE.getName(), Multiplicity.OPTIONAL, false, null),};
 
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, SqoopDataTypes.SQOOP_DBDATASTORE.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, SqoopDataTypes.SQOOP_DBDATASTORE.getName(), null,
                         ImmutableList.of(AtlasClient.DATA_SET_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(SqoopDataTypes.SQOOP_DBDATASTORE.getName(), definition);
         LOG.debug("Created definition for " + SqoopDataTypes.SQOOP_DBDATASTORE.getName());
@@ -148,7 +148,7 @@ public class SqoopDataModelGenerator {
         };
 
         HierarchicalTypeDefinition<ClassType> definition =
-                new HierarchicalTypeDefinition<>(ClassType.class, SqoopDataTypes.SQOOP_PROCESS.getName(),
+                new HierarchicalTypeDefinition<>(ClassType.class, SqoopDataTypes.SQOOP_PROCESS.getName(), null,
                         ImmutableList.of(AtlasClient.PROCESS_SUPER_TYPE), attributeDefinitions);
         classTypeDefinitions.put(SqoopDataTypes.SQOOP_PROCESS.getName(), definition);
         LOG.debug("Created definition for " + SqoopDataTypes.SQOOP_PROCESS.getName());

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 92a91e9..a43abfc 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -9,6 +9,7 @@ ATLAS-409 Atlas will not import avro tables with schema read from a file (dosset
 ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags)
 
 ALL CHANGES:
+ATLAS-479 Add description for different types during create time (guptaneeru via shwethags)
 ATLAS-508 Apache nightly build failure - UnsupportedOperationException: Not a single key: __traitNames (shwethags)
 ATLAS-422 JavaDoc NotificationConsumer and NotificationInterface.(tbeerbower via sumasai)
 ATLAS-536 Falcon hook loads incorrect configuration when -Datlas.conf is not given when falcon server startup (ayubkhan via shwethags)

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/repository/src/main/java/org/apache/atlas/repository/Constants.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/Constants.java b/repository/src/main/java/org/apache/atlas/repository/Constants.java
index 1b4cb36..aa3326e 100755
--- a/repository/src/main/java/org/apache/atlas/repository/Constants.java
+++ b/repository/src/main/java/org/apache/atlas/repository/Constants.java
@@ -49,6 +49,7 @@ public final class Constants {
     public static final String TYPE_CATEGORY_PROPERTY_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "type.category";
     public static final String VERTEX_TYPE_PROPERTY_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "type";
     public static final String TYPENAME_PROPERTY_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "type.name";
+    public static final String TYPEDESCRIPTION_PROPERTY_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "type.description";
 
     /**
      * Trait names property key and index name.

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java b/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
index 9789be7..bf10c8d 100755
--- a/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
+++ b/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
@@ -79,7 +79,7 @@ public class GraphBackedTypeStore implements ITypeStore {
     public void store(TypeSystem typeSystem, ImmutableList<String> typeNames) throws AtlasException {
         for (String typeName : typeNames) {
             IDataType dataType = typeSystem.getDataType(IDataType.class, typeName);
-            LOG.debug("Processing {}.{} in type store", dataType.getTypeCategory(), dataType.getName());
+            LOG.debug("Processing {}.{}.{} in type store", dataType.getTypeCategory(), dataType.getName(), dataType.getDescription());
             switch (dataType.getTypeCategory()) {
             case ENUM:
                 storeInGraph((EnumType) dataType);
@@ -87,14 +87,14 @@ public class GraphBackedTypeStore implements ITypeStore {
 
             case STRUCT:
                 StructType structType = (StructType) dataType;
-                storeInGraph(typeSystem, dataType.getTypeCategory(), dataType.getName(),
+                storeInGraph(typeSystem, dataType.getTypeCategory(), dataType.getName(), dataType.getDescription(),
                         ImmutableList.copyOf(structType.infoToNameMap.keySet()), ImmutableList.<String>of());
                 break;
 
             case TRAIT:
             case CLASS:
                 HierarchicalType type = (HierarchicalType) dataType;
-                storeInGraph(typeSystem, dataType.getTypeCategory(), dataType.getName(), type.immediateAttrs,
+                storeInGraph(typeSystem, dataType.getTypeCategory(), dataType.getName(), type.getDescription(), type.immediateAttrs,
                         type.superTypes);
                 break;
 
@@ -110,7 +110,7 @@ public class GraphBackedTypeStore implements ITypeStore {
     }
 
     private void storeInGraph(EnumType dataType) {
-        Vertex vertex = createVertex(dataType.getTypeCategory(), dataType.getName());
+        Vertex vertex = createVertex(dataType.getTypeCategory(), dataType.getName(), dataType.getDescription());
         List<String> values = new ArrayList<>(dataType.values().size());
         for (EnumValue enumValue : dataType.values()) {
             String key = getPropertyKey(dataType.getName(), enumValue.value);
@@ -133,8 +133,13 @@ public class GraphBackedTypeStore implements ITypeStore {
     }
 
     private void storeInGraph(TypeSystem typeSystem, DataTypes.TypeCategory category, String typeName,
+        ImmutableList<AttributeInfo> attributes, ImmutableList<String> superTypes) throws AtlasException {
+        storeInGraph(typeSystem, category, typeName, null, attributes, superTypes);
+    }
+
+    private void storeInGraph(TypeSystem typeSystem, DataTypes.TypeCategory category, String typeName, String typeDescription,
             ImmutableList<AttributeInfo> attributes, ImmutableList<String> superTypes) throws AtlasException {
-        Vertex vertex = createVertex(category, typeName);
+        Vertex vertex = createVertex(category, typeName, typeDescription);
         List<String> attrNames = new ArrayList<>();
         if (attributes != null) {
             for (AttributeInfo attribute : attributes) {
@@ -154,7 +159,7 @@ public class GraphBackedTypeStore implements ITypeStore {
         if (superTypes != null) {
             for (String superTypeName : superTypes) {
                 HierarchicalType superType = typeSystem.getDataType(HierarchicalType.class, superTypeName);
-                Vertex superVertex = createVertex(superType.getTypeCategory(), superTypeName);
+                Vertex superVertex = createVertex(superType.getTypeCategory(), superTypeName, superType.getDescription());
                 addEdge(vertex, superVertex, SUPERTYPE_EDGE_LABEL);
             }
         }
@@ -199,7 +204,7 @@ public class GraphBackedTypeStore implements ITypeStore {
 
         for (IDataType attrType : attrDataTypes) {
             if (!coreTypes.contains(attrType.getName())) {
-                Vertex attrVertex = createVertex(attrType.getTypeCategory(), attrType.getName());
+                Vertex attrVertex = createVertex(attrType.getTypeCategory(), attrType.getName(), attrType.getDescription());
                 String label = getEdgeLabel(vertexTypeName, attribute.name);
                 addEdge(vertex, attrVertex, label);
             }
@@ -227,7 +232,8 @@ public class GraphBackedTypeStore implements ITypeStore {
             Vertex vertex = (Vertex) vertices.next();
             DataTypes.TypeCategory typeCategory = vertex.getProperty(Constants.TYPE_CATEGORY_PROPERTY_KEY);
             String typeName = vertex.getProperty(Constants.TYPENAME_PROPERTY_KEY);
-            LOG.info("Restoring type {}.{}", typeCategory, typeName);
+            String typeDescription = vertex.getProperty(Constants.TYPEDESCRIPTION_PROPERTY_KEY);
+            LOG.info("Restoring type {}.{}.{}", typeCategory, typeName, typeDescription);
             switch (typeCategory) {
             case ENUM:
                 enums.add(getEnumType(vertex));
@@ -235,19 +241,19 @@ public class GraphBackedTypeStore implements ITypeStore {
 
             case STRUCT:
                 AttributeDefinition[] attributes = getAttributes(vertex, typeName);
-                structs.add(new StructTypeDefinition(typeName, attributes));
+                structs.add(new StructTypeDefinition(typeName, typeDescription, attributes));
                 break;
 
             case CLASS:
                 ImmutableList<String> superTypes = getSuperTypes(vertex);
                 attributes = getAttributes(vertex, typeName);
-                classTypes.add(new HierarchicalTypeDefinition(ClassType.class, typeName, superTypes, attributes));
+                classTypes.add(new HierarchicalTypeDefinition(ClassType.class, typeName, typeDescription, superTypes, attributes));
                 break;
 
             case TRAIT:
                 superTypes = getSuperTypes(vertex);
                 attributes = getAttributes(vertex, typeName);
-                traits.add(new HierarchicalTypeDefinition(TraitType.class, typeName, superTypes, attributes));
+                traits.add(new HierarchicalTypeDefinition(TraitType.class, typeName, typeDescription, superTypes, attributes));
                 break;
 
             default:
@@ -259,13 +265,14 @@ public class GraphBackedTypeStore implements ITypeStore {
 
     private EnumTypeDefinition getEnumType(Vertex vertex) {
         String typeName = vertex.getProperty(Constants.TYPENAME_PROPERTY_KEY);
+        String typeDescription = vertex.getProperty(Constants.TYPEDESCRIPTION_PROPERTY_KEY);
         List<EnumValue> enumValues = new ArrayList<>();
         List<String> values = vertex.getProperty(getPropertyKey(typeName));
         for (String value : values) {
             String valueProperty = getPropertyKey(typeName, value);
             enumValues.add(new EnumValue(value, vertex.<Integer>getProperty(valueProperty)));
         }
-        return new EnumTypeDefinition(typeName, enumValues.toArray(new EnumValue[enumValues.size()]));
+        return new EnumTypeDefinition(typeName, typeDescription, enumValues.toArray(new EnumValue[enumValues.size()]));
     }
 
     private ImmutableList<String> getSuperTypes(Vertex vertex) {
@@ -316,15 +323,23 @@ public class GraphBackedTypeStore implements ITypeStore {
         return vertex;
     }
 
-    private Vertex createVertex(DataTypes.TypeCategory category, String typeName) {
+    private Vertex createVertex(DataTypes.TypeCategory category, String typeName, String typeDescription) {
         Vertex vertex = findVertex(category, typeName);
         if (vertex == null) {
             LOG.debug("Adding vertex {}{}", PROPERTY_PREFIX, typeName);
             vertex = titanGraph.addVertex(null);
-            addProperty(vertex, Constants.VERTEX_TYPE_PROPERTY_KEY, VERTEX_TYPE);  //Mark as type vertex
+            addProperty(vertex, Constants.VERTEX_TYPE_PROPERTY_KEY, VERTEX_TYPE); // Mark as type vertex
             addProperty(vertex, Constants.TYPE_CATEGORY_PROPERTY_KEY, category);
             addProperty(vertex, Constants.TYPENAME_PROPERTY_KEY, typeName);
         }
+        if (typeDescription != null) {
+            String oldDescription = getPropertyKey(Constants.TYPEDESCRIPTION_PROPERTY_KEY);
+            if (!typeDescription.equals(oldDescription)) {
+                addProperty(vertex, Constants.TYPEDESCRIPTION_PROPERTY_KEY, typeDescription);
+            }
+        } else {
+            LOG.debug(" type description is null ");
+        }
         return vertex;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/repository/src/test/java/org/apache/atlas/BaseHiveRepositoryTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/BaseHiveRepositoryTest.java b/repository/src/test/java/org/apache/atlas/BaseHiveRepositoryTest.java
index 70849ca..b386cf2 100644
--- a/repository/src/test/java/org/apache/atlas/BaseHiveRepositoryTest.java
+++ b/repository/src/test/java/org/apache/atlas/BaseHiveRepositoryTest.java
@@ -151,7 +151,7 @@ public class BaseHiveRepositoryTest {
             new AttributeDefinition("table", HIVE_TABLE_TYPE, Multiplicity.REQUIRED, false, null),
             };
         HierarchicalTypeDefinition<ClassType> partClsDef =
-            new HierarchicalTypeDefinition<>(ClassType.class, PARTITION_TYPE, null,
+            new HierarchicalTypeDefinition<>(ClassType.class, PARTITION_TYPE, null, null,
                 attributeDefinitions);
 
         HierarchicalTypeDefinition<TraitType> dimTraitDef = TypesUtil.createTraitTypeDef("Dimension", null);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/repository/src/test/java/org/apache/atlas/TestUtils.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/TestUtils.java b/repository/src/test/java/org/apache/atlas/TestUtils.java
index 653ec01..d54dfab 100755
--- a/repository/src/test/java/org/apache/atlas/TestUtils.java
+++ b/repository/src/test/java/org/apache/atlas/TestUtils.java
@@ -23,7 +23,6 @@ import com.thinkaurelius.titan.core.TitanGraph;
 import com.tinkerpop.blueprints.Edge;
 import com.tinkerpop.blueprints.Vertex;
 import com.tinkerpop.blueprints.util.io.graphson.GraphSONWriter;
-
 import org.apache.atlas.repository.graph.GraphHelper;
 import org.apache.atlas.typesystem.ITypedReferenceableInstance;
 import org.apache.atlas.typesystem.Referenceable;
@@ -97,19 +96,20 @@ public final class TestUtils {
      */
     public static void defineDeptEmployeeTypes(TypeSystem ts) throws AtlasException {
 
+        String _description = "_description";
         EnumTypeDefinition orgLevelEnum =
-                new EnumTypeDefinition("OrgLevel", new EnumValue("L1", 1), new EnumValue("L2", 2));
+                new EnumTypeDefinition("OrgLevel", "OrgLevel"+_description, new EnumValue("L1", 1), new EnumValue("L2", 2));
 
         StructTypeDefinition addressDetails =
-                createStructTypeDef("Address", createRequiredAttrDef("street", DataTypes.STRING_TYPE),
+                createStructTypeDef("Address", "Address"+_description, createRequiredAttrDef("street", DataTypes.STRING_TYPE),
                         createRequiredAttrDef("city", DataTypes.STRING_TYPE));
 
-        HierarchicalTypeDefinition<ClassType> deptTypeDef = createClassTypeDef("Department", ImmutableList.<String>of(),
+        HierarchicalTypeDefinition<ClassType> deptTypeDef = createClassTypeDef("Department", "Department"+_description, ImmutableList.<String>of(),
                 createRequiredAttrDef("name", DataTypes.STRING_TYPE),
                 new AttributeDefinition("employees", String.format("array<%s>", "Person"), Multiplicity.COLLECTION,
                         true, "department"));
 
-        HierarchicalTypeDefinition<ClassType> personTypeDef = createClassTypeDef("Person", ImmutableList.<String>of(),
+        HierarchicalTypeDefinition<ClassType> personTypeDef = createClassTypeDef("Person", "Person"+_description, ImmutableList.<String>of(),
                 createRequiredAttrDef("name", DataTypes.STRING_TYPE),
                 createOptionalAttrDef("orgLevel", "OrgLevel"),
                 createOptionalAttrDef("address", "Address"),
@@ -117,12 +117,12 @@ public final class TestUtils {
                 new AttributeDefinition("manager", "Manager", Multiplicity.OPTIONAL, false, "subordinates"),
                 new AttributeDefinition("mentor", "Person", Multiplicity.OPTIONAL, false, null));
 
-        HierarchicalTypeDefinition<ClassType> managerTypeDef = createClassTypeDef("Manager", ImmutableList.of("Person"),
+        HierarchicalTypeDefinition<ClassType> managerTypeDef = createClassTypeDef("Manager", "Manager"+_description, ImmutableList.of("Person"),
                 new AttributeDefinition("subordinates", String.format("array<%s>", "Person"), Multiplicity.COLLECTION,
                         false, "manager"));
 
         HierarchicalTypeDefinition<TraitType> securityClearanceTypeDef =
-                createTraitTypeDef("SecurityClearance", ImmutableList.<String>of(),
+                createTraitTypeDef("SecurityClearance", "SecurityClearance"+_description, ImmutableList.<String>of(),
                         createRequiredAttrDef("level", DataTypes.INT_TYPE));
 
         ts.defineTypes(ImmutableList.of(orgLevelEnum), ImmutableList.of(addressDetails),
@@ -199,6 +199,7 @@ public final class TestUtils {
     public static final String SERDE_TYPE = "serdeType";
 
     public static TypesDef defineHiveTypes() {
+        String _description = "_description";
         HierarchicalTypeDefinition<ClassType> superTypeDefinition =
                 createClassTypeDef(SUPER_TYPE_NAME, ImmutableList.<String>of(),
                         createOptionalAttrDef("namespace", DataTypes.STRING_TYPE),
@@ -206,27 +207,27 @@ public final class TestUtils {
                         createOptionalAttrDef("colo", DataTypes.STRING_TYPE));
 
         HierarchicalTypeDefinition<ClassType> databaseTypeDefinition =
-                createClassTypeDef(DATABASE_TYPE, ImmutableList.of(SUPER_TYPE_NAME),
+                createClassTypeDef(DATABASE_TYPE, DATABASE_TYPE + _description,ImmutableList.of(SUPER_TYPE_NAME),
                         TypesUtil.createUniqueRequiredAttrDef("name", DataTypes.STRING_TYPE),
                         createOptionalAttrDef("created", DataTypes.DATE_TYPE),
                         createRequiredAttrDef("description", DataTypes.STRING_TYPE));
 
 
-        StructTypeDefinition structTypeDefinition = new StructTypeDefinition("serdeType",
+        StructTypeDefinition structTypeDefinition = new StructTypeDefinition("serdeType", "serdeType" + _description,
                 new AttributeDefinition[]{createRequiredAttrDef("name", DataTypes.STRING_TYPE),
                     createRequiredAttrDef("serde", DataTypes.STRING_TYPE),
                     createOptionalAttrDef("description", DataTypes.STRING_TYPE)});
 
         EnumValue values[] = {new EnumValue("MANAGED", 1), new EnumValue("EXTERNAL", 2),};
 
-        EnumTypeDefinition enumTypeDefinition = new EnumTypeDefinition("tableType", values);
+        EnumTypeDefinition enumTypeDefinition = new EnumTypeDefinition("tableType", "tableType" + _description, values);
 
         HierarchicalTypeDefinition<ClassType> columnsDefinition =
                 createClassTypeDef(COLUMN_TYPE, ImmutableList.<String>of(),
                         createRequiredAttrDef("name", DataTypes.STRING_TYPE),
                         createRequiredAttrDef("type", DataTypes.STRING_TYPE));
 
-        StructTypeDefinition partitionDefinition = new StructTypeDefinition("partition_struct_type",
+        StructTypeDefinition partitionDefinition = new StructTypeDefinition("partition_struct_type", "partition_struct_type" + _description,
                 new AttributeDefinition[]{createRequiredAttrDef("name", DataTypes.STRING_TYPE),});
 
         AttributeDefinition[] attributeDefinitions = new AttributeDefinition[]{
@@ -245,7 +246,7 @@ public final class TestUtils {
             };
 
         HierarchicalTypeDefinition<ClassType> storageDescClsDef =
-            new HierarchicalTypeDefinition<>(ClassType.class, STORAGE_DESC_TYPE,
+            new HierarchicalTypeDefinition<>(ClassType.class, STORAGE_DESC_TYPE, STORAGE_DESC_TYPE + _description,
                 ImmutableList.of(SUPER_TYPE_NAME), attributeDefinitions);
 
         AttributeDefinition[] partClsAttributes = new AttributeDefinition[]{
@@ -263,11 +264,11 @@ public final class TestUtils {
             new AttributeDefinition("parameters", new DataTypes.MapType(DataTypes.STRING_TYPE, DataTypes.STRING_TYPE).getName(), Multiplicity.OPTIONAL, false, null),};
 
         HierarchicalTypeDefinition<ClassType> partClsDef =
-            new HierarchicalTypeDefinition<>(ClassType.class, "partition_class_type",
+            new HierarchicalTypeDefinition<>(ClassType.class, "partition_class_type", "partition_class_type" + _description,
                 ImmutableList.of(SUPER_TYPE_NAME), partClsAttributes);
 
         HierarchicalTypeDefinition<ClassType> tableTypeDefinition =
-                createClassTypeDef(TABLE_TYPE, ImmutableList.of(SUPER_TYPE_NAME),
+                createClassTypeDef(TABLE_TYPE, TABLE_TYPE + _description, ImmutableList.of(SUPER_TYPE_NAME),
                         TypesUtil.createUniqueRequiredAttrDef("name", DataTypes.STRING_TYPE),
                         createRequiredAttrDef("description", DataTypes.STRING_TYPE),
                         createRequiredAttrDef("type", DataTypes.STRING_TYPE),
@@ -307,14 +308,14 @@ public final class TestUtils {
                         new AttributeDefinition("databaseComposite", DATABASE_TYPE, Multiplicity.OPTIONAL, true, null));
 
         HierarchicalTypeDefinition<TraitType> piiTypeDefinition =
-                createTraitTypeDef(PII, ImmutableList.<String>of());
+                createTraitTypeDef(PII, PII + _description, ImmutableList.<String>of());
 
         HierarchicalTypeDefinition<TraitType> classificationTypeDefinition =
-                createTraitTypeDef(CLASSIFICATION, ImmutableList.<String>of(),
+                createTraitTypeDef(CLASSIFICATION, CLASSIFICATION + _description, ImmutableList.<String>of(),
                         createRequiredAttrDef("tag", DataTypes.STRING_TYPE));
 
         HierarchicalTypeDefinition<TraitType> fetlClassificationTypeDefinition =
-                createTraitTypeDef("fetl" + CLASSIFICATION, ImmutableList.of(CLASSIFICATION),
+                createTraitTypeDef("fetl" + CLASSIFICATION, "fetl" + CLASSIFICATION + _description, ImmutableList.of(CLASSIFICATION),
                         createRequiredAttrDef("tag", DataTypes.STRING_TYPE));
 
         return TypesUtil.getTypesDef(ImmutableList.of(enumTypeDefinition),

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java b/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
index 8402eed..42183fd 100755
--- a/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
+++ b/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
@@ -24,6 +24,7 @@ import com.thinkaurelius.titan.core.util.TitanCleanup;
 import com.tinkerpop.blueprints.Direction;
 import com.tinkerpop.blueprints.Edge;
 import com.tinkerpop.blueprints.Vertex;
+
 import org.apache.atlas.AtlasException;
 import org.apache.atlas.RepositoryMetadataModule;
 import org.apache.atlas.TestUtils;
@@ -50,6 +51,7 @@ import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import javax.inject.Inject;
+
 import java.util.List;
 
 import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
@@ -103,6 +105,7 @@ public class GraphBackedTypeStoreTest {
 
     @Test(dependsOnMethods = "testStore")
     public void testRestore() throws Exception {
+        String description = "_description";
         TypesDef types = typeStore.restore();
 
         //validate enum
@@ -110,6 +113,7 @@ public class GraphBackedTypeStoreTest {
         Assert.assertEquals(1, enumTypes.size());
         EnumTypeDefinition orgLevel = enumTypes.get(0);
         Assert.assertEquals(orgLevel.name, "OrgLevel");
+        Assert.assertEquals(orgLevel.description, "OrgLevel"+description);
         Assert.assertEquals(orgLevel.enumValues.length, 2);
         EnumValue enumValue = orgLevel.enumValues[0];
         Assert.assertEquals(enumValue.value, "L1");
@@ -126,6 +130,7 @@ public class GraphBackedTypeStoreTest {
                 ClassType expectedType = ts.getDataType(ClassType.class, classType.typeName);
                 Assert.assertEquals(expectedType.immediateAttrs.size(), classType.attributeDefinitions.length);
                 Assert.assertEquals(expectedType.superTypes.size(), classType.superTypes.size());
+                Assert.assertEquals(classType.typeDescription, classType.typeName+description);
                 clsTypeFound = true;
             }
         }
@@ -136,6 +141,7 @@ public class GraphBackedTypeStoreTest {
         Assert.assertEquals(1, traitTypes.size());
         HierarchicalTypeDefinition<TraitType> trait = traitTypes.get(0);
         Assert.assertEquals("SecurityClearance", trait.typeName);
+        Assert.assertEquals(trait.typeName+description, trait.typeDescription);
         Assert.assertEquals(1, trait.attributeDefinitions.length);
         AttributeDefinition attribute = trait.attributeDefinitions[0];
         Assert.assertEquals("level", attribute.name);
@@ -149,7 +155,8 @@ public class GraphBackedTypeStoreTest {
     @Test(dependsOnMethods = "testStore")
     public void testTypeUpdate() throws Exception {
         //Add enum value
-        EnumTypeDefinition orgLevelEnum = new EnumTypeDefinition("OrgLevel", new EnumValue("L1", 1),
+        String _description = "_description_updated";
+        EnumTypeDefinition orgLevelEnum = new EnumTypeDefinition("OrgLevel", "OrgLevel"+_description, new EnumValue("L1", 1),
                 new EnumValue("L2", 2), new EnumValue("L3", 3));
 
         //Add attribute
@@ -162,7 +169,7 @@ public class GraphBackedTypeStoreTest {
         HierarchicalTypeDefinition<ClassType> superTypeDef = createClassTypeDef("Division", ImmutableList.<String>of(),
                 createOptionalAttrDef("dname", DataTypes.STRING_TYPE));
 
-        HierarchicalTypeDefinition<ClassType> deptTypeDef = createClassTypeDef("Department",
+        HierarchicalTypeDefinition<ClassType> deptTypeDef = createClassTypeDef("Department", "Department"+_description,
                 ImmutableList.of(superTypeDef.typeName), createRequiredAttrDef("name", DataTypes.STRING_TYPE),
                 new AttributeDefinition("employees", String.format("array<%s>", "Person"), Multiplicity.COLLECTION,
                         true, "department"));
@@ -182,6 +189,7 @@ public class GraphBackedTypeStoreTest {
         //Assert new enum value
         EnumType orgLevel = ts.getDataType(EnumType.class, orgLevelEnum.name);
         Assert.assertEquals(orgLevel.name, orgLevelEnum.name);
+        Assert.assertEquals(orgLevel.description, orgLevelEnum.description);
         Assert.assertEquals(orgLevel.values().size(), orgLevelEnum.enumValues.length);
         Assert.assertEquals(orgLevel.fromValue("L3").ordinal, 3);
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java b/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
index d00f12e..019e21b 100644
--- a/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
+++ b/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
@@ -165,7 +165,6 @@ public class DefaultMetadataServiceTest {
         entity.set("type", "VARCHAR(32)");
         return entity;
     }
-
     @Test(expectedExceptions = TypeNotFoundException.class)
     public void testCreateEntityWithUnknownDatatype() throws Exception {
         Referenceable entity = new Referenceable("Unknown datatype");

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/repository/src/test/scala/org/apache/atlas/query/QueryTestsUtils.scala
----------------------------------------------------------------------
diff --git a/repository/src/test/scala/org/apache/atlas/query/QueryTestsUtils.scala b/repository/src/test/scala/org/apache/atlas/query/QueryTestsUtils.scala
index 87494d8..1a0fa20 100755
--- a/repository/src/test/scala/org/apache/atlas/query/QueryTestsUtils.scala
+++ b/repository/src/test/scala/org/apache/atlas/query/QueryTestsUtils.scala
@@ -78,7 +78,7 @@ object QueryTestsUtils extends GraphUtils {
             new AttributeDefinition(name, dT.getName, m, isComposite, reverseAttributeName)
         }
 
-        def dbClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "DB", null,
+        def dbClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "DB", null, null,
             Array(
                 attrDef("name", DataTypes.STRING_TYPE),
                 attrDef("owner", DataTypes.STRING_TYPE),
@@ -92,21 +92,21 @@ object QueryTestsUtils extends GraphUtils {
                 attrDef("order", DataTypes.INT_TYPE)
             ))
 
-        def storageDescClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "StorageDescriptor", null,
+        def storageDescClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "StorageDescriptor", null, null,
             Array(
                 attrDef("inputFormat", DataTypes.STRING_TYPE),
                 attrDef("outputFormat", DataTypes.STRING_TYPE),
                 new AttributeDefinition("sortCols", DataTypes.arrayTypeName("HiveOrder"), Multiplicity.REQUIRED, false, null)
             ))
 
-        def columnClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "Column", null,
+        def columnClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "Column", null, null,
             Array(
                 attrDef("name", DataTypes.STRING_TYPE),
                 attrDef("dataType", DataTypes.STRING_TYPE),
                 new AttributeDefinition("sd", "StorageDescriptor", Multiplicity.REQUIRED, false, null)
             ))
 
-        def tblClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "Table", null,
+        def tblClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "Table", null, null,
             Array(
                 attrDef("name", DataTypes.STRING_TYPE),
                 new AttributeDefinition("db", "DB", Multiplicity.REQUIRED, false, null),
@@ -114,34 +114,34 @@ object QueryTestsUtils extends GraphUtils {
                 attrDef("created", DataTypes.DATE_TYPE)
             ))
 
-        def partitionClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "Partition", null,
+        def partitionClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "Partition", null, null,
             Array(
                 new AttributeDefinition("values", DataTypes.arrayTypeName(DataTypes.STRING_TYPE.getName), Multiplicity.REQUIRED, false, null),
                 new AttributeDefinition("table", "Table", Multiplicity.REQUIRED, false, null)
             ))
 
-        def loadProcessClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "LoadProcess", null,
+        def loadProcessClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "LoadProcess", null, null,
             Array(
                 attrDef("name", DataTypes.STRING_TYPE),
                 new AttributeDefinition("inputTables", DataTypes.arrayTypeName("Table"), Multiplicity.COLLECTION, false, null),
                 new AttributeDefinition("outputTable", "Table", Multiplicity.REQUIRED, false, null)
             ))
 
-        def viewClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "View", null,
+        def viewClsDef = new HierarchicalTypeDefinition[ClassType](classOf[ClassType], "View", null, null,
             Array(
                 attrDef("name", DataTypes.STRING_TYPE),
                 new AttributeDefinition("inputTables", DataTypes.arrayTypeName("Table"), Multiplicity.COLLECTION, false, null)
             ))
 
-        def dimTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "Dimension", null,
+        def dimTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "Dimension", null, null,
             Array[AttributeDefinition]())
-        def piiTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "PII", null,
+        def piiTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "PII", null, null,
             Array[AttributeDefinition]())
-        def metricTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "Metric", null,
+        def metricTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "Metric", null, null,
             Array[AttributeDefinition]())
-        def etlTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "ETL", null,
+        def etlTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "ETL", null, null,
             Array[AttributeDefinition]())
-        def jdbcTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "JdbcAccess", null,
+        def jdbcTraitDef = new HierarchicalTypeDefinition[TraitType](classOf[TraitType], "JdbcAccess", null, null,
             Array[AttributeDefinition]())
 
         TypeSystem.getInstance().defineTypes(ImmutableList.of[EnumTypeDefinition],

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/AbstractDataType.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/AbstractDataType.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/AbstractDataType.java
index ed0400a..92be3c7 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/AbstractDataType.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/AbstractDataType.java
@@ -19,12 +19,23 @@
 package org.apache.atlas.typesystem.types;
 
 import com.google.common.collect.ImmutableSortedMap;
+
 import org.apache.atlas.AtlasException;
 
 import java.util.Map;
 
 abstract class AbstractDataType<T> implements IDataType<T> {
 
+    public final String name;
+    public final String description;
+    
+    public AbstractDataType(String name, String description) {
+
+        super();
+        this.name = name;
+        this.description = description;
+    }
+
     protected T convertNull(Multiplicity m) throws AtlasException {
         if (!m.nullAllowed()) {
             throw new ValueConversionException.NullConversionException(m);
@@ -52,5 +63,15 @@ abstract class AbstractDataType<T> implements IDataType<T> {
             throw new TypeUpdateException(newType);
         }
     }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/ClassType.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/ClassType.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/ClassType.java
index adf5f1c..d95e80a 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/ClassType.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/ClassType.java
@@ -21,6 +21,7 @@ package org.apache.atlas.typesystem.types;
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+
 import org.apache.atlas.AtlasException;
 import org.apache.atlas.typesystem.IReferenceableInstance;
 import org.apache.atlas.typesystem.IStruct;
@@ -47,17 +48,14 @@ public class ClassType extends HierarchicalType<ClassType, IReferenceableInstanc
 
     public final Map<AttributeInfo, List<String>> infoToNameMap;
 
-    /**
-     * Used when creating a ClassType, to support recursive Structs.
-     */
-    ClassType(TypeSystem typeSystem, String name, ImmutableList<String> superTypes, int numFields) {
-        super(typeSystem, ClassType.class, name, superTypes, numFields);
+    ClassType(TypeSystem typeSystem, String name, String description, ImmutableList<String> superTypes, int numFields) {
+        super(typeSystem, ClassType.class, name, description, superTypes, numFields);
         infoToNameMap = null;
     }
 
-    ClassType(TypeSystem typeSystem, String name, ImmutableList<String> superTypes, AttributeInfo... fields)
+    ClassType(TypeSystem typeSystem, String name, String description, ImmutableList<String> superTypes, AttributeInfo... fields)
     throws AtlasException {
-        super(typeSystem, ClassType.class, name, superTypes, fields);
+        super(typeSystem, ClassType.class, name, description, superTypes, fields);
         infoToNameMap = TypeUtils.buildAttrInfoToNameMap(fieldMapping);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/DataTypes.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/DataTypes.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/DataTypes.java
index afd1682..55ec91f 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/DataTypes.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/DataTypes.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+
 import org.apache.atlas.AtlasException;
 import org.apache.atlas.typesystem.IReferenceableInstance;
 import org.apache.atlas.typesystem.persistence.Id;
@@ -57,6 +58,7 @@ public class DataTypes {
     static String MAP_TYPE_SUFFIX = ">";
 
     public static String arrayTypeName(String elemTypeName) {
+        assert elemTypeName != null;
         return String.format("%s%s%s", ARRAY_TYPE_PREFIX, elemTypeName, ARRAY_TYPE_SUFFIX);
     }
 
@@ -69,6 +71,8 @@ public class DataTypes {
     }
 
     public static String mapTypeName(IDataType keyType, IDataType valueType) {
+        assert keyType != null;
+        assert valueType != null;
         return mapTypeName(keyType.getName(), valueType.getName());
     }
 
@@ -83,6 +87,10 @@ public class DataTypes {
     }
 
     public static abstract class PrimitiveType<T> extends AbstractDataType<T> {
+        public PrimitiveType(String name, String description) {
+            super(name, description);
+        }
+
         @Override
         public TypeCategory getTypeCategory() {
             return TypeCategory.PRIMITIVE;
@@ -113,11 +121,7 @@ public class DataTypes {
         private static final String name = "boolean".intern();
 
         private BooleanType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -146,11 +150,7 @@ public class DataTypes {
         private static final String name = "byte".intern();
 
         private ByteType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -186,11 +186,7 @@ public class DataTypes {
         private static final String name = "short".intern();
 
         private ShortType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -219,11 +215,7 @@ public class DataTypes {
         private static final String name = "int".intern();
 
         private IntType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -252,11 +244,7 @@ public class DataTypes {
         private static final String name = "long".intern();
 
         private LongType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -285,11 +273,7 @@ public class DataTypes {
         private static final String name = "float".intern();
 
         private FloatType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -318,11 +302,7 @@ public class DataTypes {
         private static final String name = "double".intern();
 
         private DoubleType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -351,11 +331,7 @@ public class DataTypes {
         private static final String name = "biginteger".intern();
 
         private BigIntegerType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -390,11 +366,7 @@ public class DataTypes {
         private static final String name = "bigdecimal".intern();
 
         private BigDecimalType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -429,11 +401,7 @@ public class DataTypes {
         private static final String name = "date".intern();
 
         private DateType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -472,11 +440,7 @@ public class DataTypes {
         private static final String name = "string".intern();
 
         private StringType() {
-        }
-
-        @Override
-        public String getName() {
-            return name;
+            super(name, null);
         }
 
         @Override
@@ -493,13 +457,11 @@ public class DataTypes {
     }
 
     public static class ArrayType extends AbstractDataType<ImmutableCollection<?>> {
-        private final String nm;
         private IDataType elemType;
 
         public ArrayType(IDataType elemType) {
-            assert elemType != null;
+            super(arrayTypeName(elemType), null);
             this.elemType = elemType;
-            this.nm = arrayTypeName(elemType);
         }
 
         public IDataType getElemType() {
@@ -511,11 +473,6 @@ public class DataTypes {
         }
 
         @Override
-        public String getName() {
-            return nm;
-        }
-
-        @Override
         public ImmutableCollection<?> convert(Object val, Multiplicity m) throws AtlasException {
             if (val != null) {
                 Iterator it = null;
@@ -589,16 +546,13 @@ public class DataTypes {
 
     public static class MapType extends AbstractDataType<ImmutableMap<?, ?>> {
 
-        private final String nm;
         private IDataType keyType;
         private IDataType valueType;
 
         public MapType(IDataType keyType, IDataType valueType) {
-            assert keyType != null;
-            assert valueType != null;
+            super(mapTypeName(keyType, valueType), null);
             this.keyType = keyType;
             this.valueType = valueType;
-            this.nm = mapTypeName(keyType, valueType);
         }
 
         public IDataType getKeyType() {
@@ -618,11 +572,6 @@ public class DataTypes {
         }
 
         @Override
-        public String getName() {
-            return nm;
-        }
-
-        @Override
         public ImmutableMap<?, ?> convert(Object val, Multiplicity m) throws AtlasException {
             if (val != null) {
                 Iterator<Map.Entry> it = null;

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumType.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumType.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumType.java
index b751307..bdd0a13 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumType.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumType.java
@@ -29,13 +29,16 @@ import java.security.MessageDigest;
 public class EnumType extends AbstractDataType<EnumValue> {
 
     public final TypeSystem typeSystem;
-    public final String name;
     public final ImmutableMap<String, EnumValue> valueMap;
     public final ImmutableMap<Integer, EnumValue> ordinalMap;
 
     protected EnumType(TypeSystem typeSystem, String name, EnumValue... values) {
+       this(typeSystem, name, null, values);
+    }
+
+    protected EnumType(TypeSystem typeSystem, String name, String description, EnumValue... values) {
+        super(name, description);
         this.typeSystem = typeSystem;
-        this.name = name;
         ImmutableMap.Builder<String, EnumValue> b1 = new ImmutableMap.Builder();
         ImmutableMap.Builder<Integer, EnumValue> b2 = new ImmutableMap.Builder();
         for (EnumValue v : values) {
@@ -46,12 +49,6 @@ public class EnumType extends AbstractDataType<EnumValue> {
         ordinalMap = b2.build();
     }
 
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
     @Override
     public EnumValue convert(Object val, Multiplicity m) throws AtlasException {
         if (val != null) {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumTypeDefinition.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumTypeDefinition.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumTypeDefinition.java
index aca1a41..6340615 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumTypeDefinition.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/EnumTypeDefinition.java
@@ -25,10 +25,16 @@ import java.util.Arrays;
 public final class EnumTypeDefinition {
 
     public final String name;
+    public final String description;
     public final EnumValue[] enumValues;
 
     public EnumTypeDefinition(String name, EnumValue... enumValues) {
+        this(name, null, enumValues);
+    }
+
+    public EnumTypeDefinition(String name, String description, EnumValue... enumValues) {
         this.name = ParamChecker.notEmpty(name, "Enum type name");
+        this.description = description;
         this.enumValues = ParamChecker.notNullElements(enumValues, "Enum values");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalType.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalType.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalType.java
index 5a331a6..7c8db84 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalType.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalType.java
@@ -49,7 +49,6 @@ public abstract class HierarchicalType<ST extends HierarchicalType, T> extends A
 
     public final TypeSystem typeSystem;
     public final Class<ST> superTypeClass;
-    public final String name;
     public final FieldMapping fieldMapping;
     public final int numFields;
     public final ImmutableList<String> superTypes;
@@ -58,14 +57,19 @@ public abstract class HierarchicalType<ST extends HierarchicalType, T> extends A
     protected ImmutableMap<String, List<Path>> superTypePaths;
     protected ImmutableMap<String, Path> pathNameToPathMap;
 
+    HierarchicalType(TypeSystem typeSystem, Class<ST> superTypeClass, String name, ImmutableList<String> superTypes,
+        int numFields) {
+        this(typeSystem, superTypeClass, name, null, superTypes, numFields);
+    }
+
     /**
      * Used when creating a Type, to support recursive Structs.
      */
-    HierarchicalType(TypeSystem typeSystem, Class<ST> superTypeClass, String name, ImmutableList<String> superTypes,
+    HierarchicalType(TypeSystem typeSystem, Class<ST> superTypeClass, String name, String description, ImmutableList<String> superTypes,
             int numFields) {
+        super(name, description);
         this.typeSystem = typeSystem;
         this.superTypeClass = superTypeClass;
-        this.name = name;
         this.fieldMapping = null;
         this.numFields = numFields;
         this.superTypes = superTypes;
@@ -74,10 +78,14 @@ public abstract class HierarchicalType<ST extends HierarchicalType, T> extends A
     }
 
     HierarchicalType(TypeSystem typeSystem, Class<ST> superTypeClass, String name, ImmutableList<String> superTypes,
+        AttributeInfo... fields) throws AtlasException {
+        this(typeSystem, superTypeClass, name, null, superTypes, fields);
+    }
+    HierarchicalType(TypeSystem typeSystem, Class<ST> superTypeClass, String name, String description, ImmutableList<String> superTypes,
             AttributeInfo... fields) throws AtlasException {
+        super(name, description);
         this.typeSystem = typeSystem;
         this.superTypeClass = superTypeClass;
-        this.name = name;
         Pair<FieldMapping, ImmutableMap<String, String>> p = constructFieldMapping(superTypes, fields);
         this.fieldMapping = p.left;
         this.attributeNameToType = p.right;
@@ -86,11 +94,6 @@ public abstract class HierarchicalType<ST extends HierarchicalType, T> extends A
         this.immediateAttrs = ImmutableList.copyOf(fields);
     }
 
-    @Override
-    public String getName() {
-        return name;
-    }
-
     public FieldMapping fieldMapping() {
         return fieldMapping;
     }
@@ -490,6 +493,4 @@ public abstract class HierarchicalType<ST extends HierarchicalType, T> extends A
             throw new UnsupportedOperationException();
         }
     }
-
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalTypeDefinition.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalTypeDefinition.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalTypeDefinition.java
index 3188840..973a591 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalTypeDefinition.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/HierarchicalTypeDefinition.java
@@ -31,20 +31,21 @@ public class HierarchicalTypeDefinition<T extends HierarchicalType> extends Stru
      * not intended public consumption
      * @param hierarchicalMetaTypeName
      * @param typeName
+     * @param typeDescription
      * @param superTypes
      * @param attributeDefinitions
      * @throws ClassNotFoundException
      */
     @InterfaceAudience.Private
-    public HierarchicalTypeDefinition(String hierarchicalMetaTypeName, String typeName, String[] superTypes,
+    public HierarchicalTypeDefinition(String hierarchicalMetaTypeName, String typeName, String typeDescription, String[] superTypes,
             AttributeDefinition[] attributeDefinitions) throws ClassNotFoundException {
-        this((Class<T>) Class.forName(hierarchicalMetaTypeName), typeName, ImmutableList.copyOf(superTypes),
+        this((Class<T>) Class.forName(hierarchicalMetaTypeName), typeName, typeDescription, ImmutableList.copyOf(superTypes),
                 attributeDefinitions);
     }
 
-    public HierarchicalTypeDefinition(Class<T> hierarchicalMetaType, String typeName, ImmutableList<String> superTypes,
-            AttributeDefinition[] attributeDefinitions) {
-        super(typeName, false, attributeDefinitions);
+    public HierarchicalTypeDefinition(Class<T> hierarchicalMetaType, String typeName, String typeDescription, ImmutableList<String> superTypes,
+        AttributeDefinition[] attributeDefinitions) {
+        super(typeName, typeDescription, false, attributeDefinitions);
         hierarchicalMetaTypeName = hierarchicalMetaType.getName();
         this.superTypes = superTypes == null ? ImmutableList.<String>of() : superTypes;
     }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/IDataType.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/IDataType.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/IDataType.java
index 293014e..373ad2c 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/IDataType.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/IDataType.java
@@ -34,5 +34,7 @@ public interface IDataType<T> {
     void validateUpdate(IDataType newType) throws TypeUpdateException;
 
     void updateSignatureHash(MessageDigest digester, Object val) throws AtlasException;
+
+    String getDescription();
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructType.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructType.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructType.java
index ba053d2..54e344f 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructType.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructType.java
@@ -18,10 +18,6 @@
 
 package org.apache.atlas.typesystem.types;
 
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.typesystem.IStruct;
-import org.apache.atlas.typesystem.ITypedStruct;
-
 import java.nio.charset.Charset;
 import java.security.MessageDigest;
 import java.util.HashMap;
@@ -29,31 +25,31 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.atlas.AtlasException;
+import org.apache.atlas.typesystem.IStruct;
+import org.apache.atlas.typesystem.ITypedStruct;
+
 public class StructType extends AbstractDataType<IStruct> implements IConstructableType<IStruct, ITypedStruct> {
 
     public final TypeSystem typeSystem;
-    public final String name;
     public final FieldMapping fieldMapping;
     public final Map<AttributeInfo, List<String>> infoToNameMap;
     public final int numFields;
     private final TypedStructHandler handler;
 
-    /**
-     * Used when creating a StructType, to support recursive Structs.
-     */
-    protected StructType(TypeSystem typeSystem, String name, int numFields) {
+    protected StructType(TypeSystem typeSystem, String name, String description, int numFields) {
+        super(name, description);
         this.typeSystem = typeSystem;
-        this.name = name;
         this.fieldMapping = null;
         infoToNameMap = null;
         this.numFields = numFields;
         this.handler = null;
     }
 
-    protected StructType(TypeSystem typeSystem, String name, AttributeInfo... fields)
+    protected StructType(TypeSystem typeSystem, String name, String description, AttributeInfo... fields)
     throws AtlasException {
+        super(name, description);
         this.typeSystem = typeSystem;
-        this.name = name;
         this.fieldMapping = constructFieldMapping(fields);
         infoToNameMap = TypeUtils.buildAttrInfoToNameMap(this.fieldMapping);
         this.numFields = this.fieldMapping.fields.size();
@@ -64,11 +60,6 @@ public class StructType extends AbstractDataType<IStruct> implements IConstructa
         return fieldMapping;
     }
 
-    @Override
-    public String getName() {
-        return name;
-    }
-
     /**
      * Validate that current definition can be updated with the new definition
      * @param newType
@@ -216,4 +207,5 @@ public class StructType extends AbstractDataType<IStruct> implements IConstructa
     public List<String> getNames(AttributeInfo info) {
         return infoToNameMap.get(info);
     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructTypeDefinition.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructTypeDefinition.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructTypeDefinition.java
index e47c4e5..9dc93ae 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructTypeDefinition.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/StructTypeDefinition.java
@@ -25,10 +25,16 @@ import java.util.Arrays;
 public class StructTypeDefinition {
 
     public final String typeName;
+    public final String typeDescription;//optional field
     public final AttributeDefinition[] attributeDefinitions;
 
     protected StructTypeDefinition(String typeName, boolean validate, AttributeDefinition... attributeDefinitions) {
+        this(typeName, null, validate, attributeDefinitions);
+    }
+
+    protected StructTypeDefinition(String typeName, String typeDescription, boolean validate, AttributeDefinition... attributeDefinitions) {
         this.typeName = ParamChecker.notEmpty(typeName, "Struct type name");
+        this.typeDescription = typeDescription;
         if (attributeDefinitions != null && attributeDefinitions.length != 0) {
             ParamChecker.notNullElements(attributeDefinitions, "Attribute definitions");
         }
@@ -36,7 +42,13 @@ public class StructTypeDefinition {
     }
 
     public StructTypeDefinition(String typeName, AttributeDefinition[] attributeDefinitions) {
+        this(typeName, null, attributeDefinitions);
+    }
+
+    public StructTypeDefinition(String typeName, String typeDescription,
+        AttributeDefinition[] attributeDefinitions) {
         this.typeName = ParamChecker.notEmpty(typeName, "Struct type name");
+        this.typeDescription = typeDescription;
         this.attributeDefinitions = ParamChecker.notNullElements(attributeDefinitions, "Attribute definitions");
     }
 
@@ -57,7 +69,6 @@ public class StructTypeDefinition {
         if (!typeName.equals(that.typeName)) {
             return false;
         }
-
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TraitType.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TraitType.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TraitType.java
index f5a3875..baf5b4d 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TraitType.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TraitType.java
@@ -34,18 +34,15 @@ public class TraitType extends HierarchicalType<TraitType, IStruct>
     public final Map<AttributeInfo, List<String>> infoToNameMap;
     private final TypedStructHandler handler;
 
-    /**
-     * Used when creating a TraitType, to support recursive Structs.
-     */
-    TraitType(TypeSystem typeSystem, String name, ImmutableList<String> superTraits, int numFields) {
-        super(typeSystem, TraitType.class, name, superTraits, numFields);
+    TraitType(TypeSystem typeSystem, String name, String description, ImmutableList<String> superTraits, int numFields) {
+        super(typeSystem, TraitType.class, name, description, superTraits, numFields);
         handler = null;
         infoToNameMap = null;
     }
 
-    TraitType(TypeSystem typeSystem, String name, ImmutableList<String> superTraits, AttributeInfo... fields)
+    TraitType(TypeSystem typeSystem, String name, String description, ImmutableList<String> superTraits, AttributeInfo... fields)
     throws AtlasException {
-        super(typeSystem, TraitType.class, name, superTraits, fields);
+        super(typeSystem, TraitType.class, name, description, superTraits, fields);
         handler = new TypedStructHandler(this);
         infoToNameMap = TypeUtils.buildAttrInfoToNameMap(fieldMapping);
     }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
index c0b0698..bd81d7f 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
@@ -168,7 +168,12 @@ public class TypeSystem {
 
     public StructType defineStructType(String name, boolean errorIfExists, AttributeDefinition... attrDefs)
     throws AtlasException {
-        StructTypeDefinition structDef = new StructTypeDefinition(name, attrDefs);
+        return defineStructType(name, null, errorIfExists, attrDefs);
+    }
+
+    public StructType defineStructType(String name, String description, boolean errorIfExists, AttributeDefinition... attrDefs)
+    throws AtlasException {
+        StructTypeDefinition structDef = new StructTypeDefinition(name, description, attrDefs);
         defineTypes(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.of(structDef),
                 ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
                 ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
@@ -192,7 +197,7 @@ public class TypeSystem {
             infos[i] = new AttributeInfo(this, attrDefs[i], tempTypes);
         }
 
-        return new StructType(this, name, infos);
+        return new StructType(this, name, null, infos);
     }
 
     public TraitType defineTraitType(HierarchicalTypeDefinition<TraitType> traitDef) throws AtlasException {
@@ -272,13 +277,17 @@ public class TypeSystem {
         return defineEnumType(new EnumTypeDefinition(name, values));
     }
 
+    public EnumType defineEnumType(String name, String description, EnumValue... values) throws AtlasException {
+        return defineEnumType(new EnumTypeDefinition(name, description, values));
+    }
+
     public EnumType defineEnumType(EnumTypeDefinition eDef) throws AtlasException {
         assert eDef.name != null;
         if (types.containsKey(eDef.name)) {
             throw new AtlasException(String.format("Redefinition of type %s not supported", eDef.name));
         }
 
-        EnumType eT = new EnumType(this, eDef.name, eDef.enumValues);
+        EnumType eT = new EnumType(this, eDef.name, eDef.description, eDef.enumValues);
         types.put(eDef.name, eT);
         typeCategoriesToTypeNamesMap.put(DataTypes.TypeCategory.ENUM, eDef.name);
         return eT;
@@ -348,7 +357,7 @@ public class TypeSystem {
                     throw new AtlasException(String.format("Redefinition of type %s not supported", eDef.name));
                 }
 
-                EnumType eT = new EnumType(this, eDef.name, eDef.enumValues);
+                EnumType eT = new EnumType(this, eDef.name, eDef.description, eDef.enumValues);
                 transientTypes.put(eDef.name, eT);
             }
 
@@ -357,7 +366,7 @@ public class TypeSystem {
                 if (!update && (transientTypes.containsKey(sDef.typeName) || types.containsKey(sDef.typeName))) {
                     throw new TypeExistsException(String.format("Cannot redefine type %s", sDef.typeName));
                 }
-                StructType sT = new StructType(this, sDef.typeName, sDef.attributeDefinitions.length);
+                StructType sT = new StructType(this, sDef.typeName, sDef.typeDescription, sDef.attributeDefinitions.length);
                 structNameToDefMap.put(sDef.typeName, sDef);
                 transientTypes.put(sDef.typeName, sT);
             }
@@ -368,7 +377,7 @@ public class TypeSystem {
                         (transientTypes.containsKey(traitDef.typeName) || types.containsKey(traitDef.typeName))) {
                     throw new TypeExistsException(String.format("Cannot redefine type %s", traitDef.typeName));
                 }
-                TraitType tT = new TraitType(this, traitDef.typeName, traitDef.superTypes,
+                TraitType tT = new TraitType(this, traitDef.typeName, traitDef.typeDescription, traitDef.superTypes,
                         traitDef.attributeDefinitions.length);
                 traitNameToDefMap.put(traitDef.typeName, traitDef);
                 transientTypes.put(traitDef.typeName, tT);
@@ -381,7 +390,7 @@ public class TypeSystem {
                     throw new TypeExistsException(String.format("Cannot redefine type %s", classDef.typeName));
                 }
 
-                ClassType cT = new ClassType(this, classDef.typeName, classDef.superTypes,
+                ClassType cT = new ClassType(this, classDef.typeName, classDef.typeDescription, classDef.superTypes,
                         classDef.attributeDefinitions.length);
                 classNameToDefMap.put(classDef.typeName, classDef);
                 transientTypes.put(classDef.typeName, cT);
@@ -471,7 +480,7 @@ public class TypeSystem {
                 infos[i] = constructAttributeInfo(def.attributeDefinitions[i]);
             }
 
-            StructType type = new StructType(this, def.typeName, infos);
+            StructType type = new StructType(this, def.typeName, def.typeDescription, infos);
             transientTypes.put(def.typeName, type);
             return type;
         }
@@ -484,9 +493,9 @@ public class TypeSystem {
             }
 
             try {
-                Constructor<U> cons = cls.getDeclaredConstructor(TypeSystem.class, String.class, ImmutableList.class,
+                Constructor<U> cons = cls.getDeclaredConstructor(TypeSystem.class, String.class, String.class, ImmutableList.class,
                         AttributeInfo[].class);
-                U type = cons.newInstance(this, def.typeName, def.superTypes, infos);
+                U type = cons.newInstance(this, def.typeName, def.typeDescription, def.superTypes, infos);
                 transientTypes.put(def.typeName, type);
                 return type;
             } catch (Exception e) {
@@ -682,7 +691,7 @@ public class TypeSystem {
                 infos[0] = new AttributeInfo(TypeSystem.this, idAttr, null);
                 infos[1] = new AttributeInfo(TypeSystem.this, typNmAttr, null);
 
-                StructType type = new StructType(TypeSystem.this, TYP_NAME, infos);
+                StructType type = new StructType(TypeSystem.this, TYP_NAME, null, infos);
                 TypeSystem.this.types.put(TYP_NAME, type);
 
             } catch (AtlasException me) {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/java/org/apache/atlas/typesystem/types/utils/TypesUtil.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/utils/TypesUtil.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/utils/TypesUtil.java
index ee82ce5..80968d8 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/utils/TypesUtil.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/utils/TypesUtil.java
@@ -65,16 +65,30 @@ public class TypesUtil {
 
     public static HierarchicalTypeDefinition<TraitType> createTraitTypeDef(String name,
             ImmutableList<String> superTypes, AttributeDefinition... attrDefs) {
-        return new HierarchicalTypeDefinition<>(TraitType.class, name, superTypes, attrDefs);
+        return createTraitTypeDef(name, null, superTypes, attrDefs);
+    }
+
+    public static HierarchicalTypeDefinition<TraitType> createTraitTypeDef(String name, String description,
+        ImmutableList<String> superTypes, AttributeDefinition... attrDefs) {
+        return new HierarchicalTypeDefinition<>(TraitType.class, name, description, superTypes, attrDefs);
     }
 
     public static StructTypeDefinition createStructTypeDef(String name, AttributeDefinition... attrDefs) {
-        return new StructTypeDefinition(name, attrDefs);
+        return createStructTypeDef(name, null, attrDefs);
+    }
+
+    public static StructTypeDefinition createStructTypeDef(String name, String description, AttributeDefinition... attrDefs) {
+        return new StructTypeDefinition(name, description, attrDefs);
     }
 
     public static HierarchicalTypeDefinition<ClassType> createClassTypeDef(String name,
             ImmutableList<String> superTypes, AttributeDefinition... attrDefs) {
-        return new HierarchicalTypeDefinition<>(ClassType.class, name, superTypes, attrDefs);
+        return createClassTypeDef(name, null, superTypes, attrDefs);
+    }
+
+    public static HierarchicalTypeDefinition<ClassType> createClassTypeDef(String name, String description,
+        ImmutableList<String> superTypes, AttributeDefinition... attrDefs) {
+    return new HierarchicalTypeDefinition<>(ClassType.class, name, description, superTypes, attrDefs);
     }
 
     public static TypesDef getTypesDef(ImmutableList<EnumTypeDefinition> enums,

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala
----------------------------------------------------------------------
diff --git a/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala b/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala
index 6bdbc79..5d50c45 100755
--- a/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala
+++ b/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala
@@ -131,28 +131,28 @@ object TypesSerialization {
 
     private def convertEnumTypeToEnumTypeDef(et: EnumType) = {
         val eVals: Seq[EnumValue] = et.valueMap.values().toSeq
-        new EnumTypeDefinition(et.name, eVals: _*)
+        new EnumTypeDefinition(et.name, et.description, eVals: _*)
     }
 
     private def convertStructTypeToStructDef(st: StructType): StructTypeDefinition = {
 
         val aDefs: Iterable[AttributeDefinition] =
             st.fieldMapping.fields.values().map(convertAttributeInfoToAttributeDef(_))
-        new StructTypeDefinition(st.name, aDefs.toArray)
+        new StructTypeDefinition(st.name, st.description, aDefs.toArray)
     }
 
     private def convertTraitTypeToHierarchicalTypeDefintion(tt: TraitType): HierarchicalTypeDefinition[TraitType] = {
 
         val aDefs: Iterable[AttributeDefinition] =
             tt.immediateAttrs.map(convertAttributeInfoToAttributeDef(_))
-        new HierarchicalTypeDefinition[TraitType](classOf[TraitType], tt.name, tt.superTypes, aDefs.toArray)
+        new HierarchicalTypeDefinition[TraitType](classOf[TraitType], tt.name, tt.description, tt.superTypes, aDefs.toArray)
     }
 
     private def convertClassTypeToHierarchicalTypeDefintion(tt: ClassType): HierarchicalTypeDefinition[ClassType] = {
 
         val aDefs: Iterable[AttributeDefinition] =
             tt.immediateAttrs.map(convertAttributeInfoToAttributeDef(_))
-        new HierarchicalTypeDefinition[ClassType](classOf[ClassType], tt.name, tt.superTypes, aDefs.toArray)
+        new HierarchicalTypeDefinition[ClassType](classOf[ClassType], tt.name, tt.description, tt.superTypes, aDefs.toArray)
     }
 
     def convertToTypesDef(ts: TypeSystem, export: IDataType[_] => Boolean): TypesDef = {
@@ -212,8 +212,13 @@ trait TypeHelpers {
     def optionalAttr(name: String, dataType: IDataType[_]) =
         new AttributeDefinition(name, dataType.getName, Multiplicity.OPTIONAL, false, null)
 
-    def structDef(name: String, attrs: AttributeDefinition*) = {
-        new StructTypeDefinition(name, attrs.toArray)
+    def structDef(name: String, attrs: AttributeDefinition*):
+    StructTypeDefinition = {
+        structDef(name, None, attrs:_*)
+    }
+
+   def structDef(name: String, description: Option[String], attrs: AttributeDefinition*) = {
+        new StructTypeDefinition(name, description.getOrElse(null), attrs.toArray)
     }
 
     def defineTraits(ts: TypeSystem, tDefs: HierarchicalTypeDefinition[TraitType]*) = {
@@ -222,15 +227,25 @@ trait TypeHelpers {
 
     def createTraitTypeDef(name: String, superTypes: Seq[String], attrDefs: AttributeDefinition*):
     HierarchicalTypeDefinition[TraitType] = {
+        createTraitTypeDef(name, None, superTypes, attrDefs:_*)
+    }
+    
+    def createTraitTypeDef(name: String, description: Option[String], superTypes: Seq[String], attrDefs: AttributeDefinition*):
+    HierarchicalTypeDefinition[TraitType] = {
         val sts = ImmutableList.copyOf(superTypes.toArray)
-        return new HierarchicalTypeDefinition[TraitType](classOf[TraitType], name,
+        return new HierarchicalTypeDefinition[TraitType](classOf[TraitType], name, description.getOrElse(null),
             sts, attrDefs.toArray)
     }
 
     def createClassTypeDef(name: String, superTypes: Seq[String], attrDefs: AttributeDefinition*):
     HierarchicalTypeDefinition[ClassType] = {
+         createClassTypeDef( name, None, superTypes, attrDefs:_*)
+    }
+    
+    def createClassTypeDef(name: String, description: Option[String], superTypes: Seq[String], attrDefs: AttributeDefinition*):
+    HierarchicalTypeDefinition[ClassType] = {
         val sts = ImmutableList.copyOf(superTypes.toArray)
-        return new HierarchicalTypeDefinition[ClassType](classOf[ClassType], name,
+        return new HierarchicalTypeDefinition[ClassType](classOf[ClassType], name, description.getOrElse(null),
             sts, attrDefs.toArray)
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b6fb1f1a/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java
index f454641..a0f5843 100755
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java
+++ b/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java
@@ -18,16 +18,18 @@
 
 package org.apache.atlas.typesystem.types;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.atlas.AtlasException;
 import org.apache.atlas.typesystem.ITypedReferenceableInstance;
 import org.apache.atlas.typesystem.Referenceable;
 import org.apache.atlas.typesystem.TypesDef;
+import org.apache.atlas.typesystem.json.TypesSerialization;
 import org.apache.atlas.typesystem.types.utils.TypesUtil;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.ImmutableList;
+
 public class ClassTest extends HierarchicalTypeTest<ClassType> {
 
     @BeforeMethod
@@ -72,15 +74,38 @@ public class ClassTest extends HierarchicalTypeTest<ClassType> {
                 "}");
     }
 
+
+    @Test
+    public void testSerDeWithoutDescription() throws Exception {
+        HierarchicalTypeDefinition<ClassType> clsType = TypesUtil
+                .createClassTypeDef("Random", ImmutableList.<String>of(),
+                        TypesUtil.createRequiredAttrDef("name", DataTypes.STRING_TYPE));
+        
+        TypesDef typesDef = getTypesDef(clsType);
+        String json = TypesSerialization.toJson(typesDef);
+        System.out.println("json " +  json);
+        TypesSerialization.fromJson(json);
+    }
+    
+    @Test
+    public void testSerDeWithDescription() throws Exception {
+        HierarchicalTypeDefinition<ClassType> clsType = TypesUtil
+                .createClassTypeDef("Random", "Random-description", ImmutableList.<String>of(),
+                        TypesUtil.createRequiredAttrDef("name", DataTypes.STRING_TYPE));
+        TypesDef typesDef = getTypesDef(clsType);
+        String json = TypesSerialization.toJson(typesDef);
+        System.out.println("json " +  json);
+        TypesSerialization.fromJson(json);
+    }
     @Override
     protected HierarchicalTypeDefinition<ClassType> getTypeDefinition(String name, AttributeDefinition... attributes) {
-        return new HierarchicalTypeDefinition(ClassType.class, name, null, attributes);
+        return new HierarchicalTypeDefinition(ClassType.class, name, null, null, attributes);
     }
 
     @Override
     protected HierarchicalTypeDefinition<ClassType> getTypeDefinition(String name, ImmutableList<String> superTypes,
                                                                       AttributeDefinition... attributes) {
-        return new HierarchicalTypeDefinition(ClassType.class, name, superTypes, attributes);
+        return new HierarchicalTypeDefinition(ClassType.class, name, null, superTypes, attributes);
     }
 
     @Override