You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by su...@apache.org on 2015/12/11 06:29:30 UTC

incubator-atlas git commit: ATLAS-376 UI: Use the Schema API of the backend to populate details for Schema tab (darshankumar89 via sumasai)

Repository: incubator-atlas
Updated Branches:
  refs/heads/master 323b90058 -> 532d6cec5


ATLAS-376 UI: Use the Schema API of the backend to populate details for Schema tab (darshankumar89 via sumasai)


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

Branch: refs/heads/master
Commit: 532d6cec5c0c947f706668355f81c116732a62a9
Parents: 323b900
Author: Suma Shivaprasad <su...@gmail.com>
Authored: Fri Dec 11 10:59:13 2015 +0530
Committer: Suma Shivaprasad <su...@gmail.com>
Committed: Fri Dec 11 10:59:13 2015 +0530

----------------------------------------------------------------------
 dashboard/gruntfile.js                          |   3 +-
 .../public/modules/details/detailsController.js |  36 +++++-
 .../public/modules/details/detailsResource.js   |  14 +-
 .../public/modules/details/detailsRoutes.js     |  25 +++-
 .../public/modules/details/views/details.html   | 128 +++++++++----------
 .../public/modules/details/views/schema.html    |  69 ++++++----
 .../public/modules/search/searchController.js   |   2 +-
 dashboard/public/modules/search/searchRoutes.js |   8 +-
 .../public/modules/search/views/search.html     |   4 +-
 .../tags/instance/createTagController.js        |  19 +--
 .../tags/instance/instanceTagsController.js     |   2 +-
 dashboard/public/modules/tags/tagsRoutes.js     |   4 +
 release-log.txt                                 |   1 +
 13 files changed, 200 insertions(+), 115 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/gruntfile.js
----------------------------------------------------------------------
diff --git a/dashboard/gruntfile.js b/dashboard/gruntfile.js
index e84893e..52ae412 100644
--- a/dashboard/gruntfile.js
+++ b/dashboard/gruntfile.js
@@ -155,7 +155,8 @@ module.exports = function(grunt) {
                         'hostnames': ['*'],
                         'routes': {
                             '/': distPath,
-                            '/api': 'http://162.212.133.190:21000/api'
+                            //'/api': 'http://162.249.6.39:21000/api'
+                             '/api': 'http://ec2-52-25-142-7.us-west-2.compute.amazonaws.com:21000/api'
                         }
                     }]
                 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/details/detailsController.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/details/detailsController.js b/dashboard/public/modules/details/detailsController.js
index 65a4e40..c03824c 100644
--- a/dashboard/public/modules/details/detailsController.js
+++ b/dashboard/public/modules/details/detailsController.js
@@ -17,23 +17,46 @@
  */
 'use strict';
 
-angular.module('dgc.details').controller('DetailsController', ['$window', '$scope', '$state', '$stateParams', 'DetailsResource',
-    function($window, $scope, $state, $stateParams, DetailsResource) {
+angular.module('dgc.details').controller('DetailsController', ['$window', '$scope', '$state', '$stateParams', 'DetailsResource', 'SchemaResource',
+    function($window, $scope, $state, $stateParams, DetailsResource, SchemaResource) {
 
         $scope.tableName = false;
         $scope.isTable = false;
 
         DetailsResource.get({
             id: $stateParams.id
+
         }, function(data) {
             $scope.details = data;
-            $scope.schemas = data;
             $scope.tableName = data.values.name;
             $scope.isTable = (typeof data.typeName !== 'undefined' && data.typeName.toLowerCase().indexOf('table') !== -1) ? true : false;
             $scope.onActivate('io');
             $scope.isTags = (typeof data.traits !== 'undefined' && typeof data.traits === 'object') ? true : false;
+
+            if (data && data.values && data.values.name && data.values.name !== "") {
+                SchemaResource.get({
+                    tableName: data.values.name
+                }, function(data1) {
+                    if (data1.results) {
+                        $scope.schema = data1.results.rows;
+                        $scope.isSchema = (data1.results.rows && data1.results.rows.length > 0) ? true : false;
+                        for (var t = 0; t < data1.results.rows.length; t++) {
+                            if (data1.results.rows[t].$id$) {
+                                $scope.isTraitId = true; 
+                            }
+                            if (data1.results.rows[t].type) {
+                                $scope.isHiveSchema = true; 
+                            }  
+                            if($scope.isTraitId && $scope.isHiveSchema){
+                                break;
+                            }
+                        } 
+                    }
+                });
+            }
         });
 
+
         $scope.isNumber = angular.isNumber;
         $scope.isObject = angular.isObject;
         $scope.isString = angular.isString;
@@ -45,6 +68,13 @@ angular.module('dgc.details').controller('DetailsController', ['$window', '$scop
             });
         };
 
+        $scope.openAddTagHome = function(traitId) {
+            $state.go('addTagDetails', {
+                tId: traitId
+            });
+        };
+
+
         $scope.goDetails = function(id) {
             $state.go("details", {
                 id: id

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/details/detailsResource.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/details/detailsResource.js b/dashboard/public/modules/details/detailsResource.js
index 3941e78..651ffd5 100644
--- a/dashboard/public/modules/details/detailsResource.js
+++ b/dashboard/public/modules/details/detailsResource.js
@@ -37,6 +37,18 @@ angular.module('dgc.details').factory('DetailsResource', ['$resource', function(
             method: 'DELETE',
             url: '/api/atlas/entities/:id/traits/:tagName'
         }
-    });
+     });
 
+}]).factory('SchemaResource', ['$resource', function($resource) {
+    return $resource('/api/atlas/lineage/hive/table/:tableName/schema', {}, {
+        get: {
+            method: 'GET',
+            transformResponse: function(data) {
+                if (data) {
+                    return angular.fromJson(data);
+                }
+            },
+            responseType: 'json'
+        }
+});
 }]);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/details/detailsRoutes.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/details/detailsRoutes.js b/dashboard/public/modules/details/detailsRoutes.js
index 17e32fa..b9e0661 100644
--- a/dashboard/public/modules/details/detailsRoutes.js
+++ b/dashboard/public/modules/details/detailsRoutes.js
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 'use strict';
 
 angular.module('dgc.details').config(['$stateProvider',
@@ -26,5 +25,27 @@ angular.module('dgc.details').config(['$stateProvider',
             url: '/details/:id',
             templateUrl: '/modules/details/views/details.html'
         });
+
+        $stateProvider.state('addTagDetails', {
+            parent: 'details',
+            params: {
+                tId: null,
+                frm : 'details'
+            },
+            onEnter: ['$stateParams', '$state', '$modal', 'NavigationResource', function($stateParams, $state, $modal, NavigationResource) {
+                $modal.open({
+                    templateUrl: '/modules/tags/instance/views/createTag.html',
+                    controller: 'CreateTagController',
+                    windowClass: 'create-tag-entity',
+                    resolve: {
+                        typesList: function() {
+                            return NavigationResource.get().$promise;
+                        }
+                    }
+                }).result.finally(function() {
+                    $state.go('^');
+                });
+            }]
+        });
     }
-]);
+]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/details/views/details.html
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/details/views/details.html b/dashboard/public/modules/details/views/details.html
index 95cd098..0878308 100644
--- a/dashboard/public/modules/details/views/details.html
+++ b/dashboard/public/modules/details/views/details.html
@@ -1,85 +1,81 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
 
+
+<!--
+    ~ Licensed to the Apache Software Foundation (ASF) under one
+    ~ or more contributor license agreements.  See the NOTICE file
+    ~ distributed with this work for additional information
+    ~ regarding copyright ownership.  The ASF licenses this file
+    ~ to you under the Apache License, Version 2.0 (the
+    ~ "License"); you may not use this file except in compliance
+    ~ with the License.  You may obtain a copy of the License at
+    ~
+    ~     http://www.apache.org/licenses/LICENSE-2.0
+    ~
+    ~ Unless required by applicable law or agreed to in writing, software
+    ~ distributed under the License is distributed on an "AS IS" BASIS,
+    ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    ~ See the License for the specific language governing permissions and
+    ~ limitations under the License.
+    -->
 <div class="row detailsPage" data-ng-controller="DetailsController">
     <div class="col-lg-12 padding0">
-      <ul class="breadcrumb">
-          <li><button class="btn btn-link" data-ng-click="goBack()"><i class="fa fa-arrow-left"></i> Back To Result</button> </li>
-      </ul>
+        <ul class="breadcrumb">
+            <li><button class="btn btn-link" data-ng-click="goBack()"><i class="fa fa-arrow-left"></i> Back To Result</button> </li>
+        </ul>
     </div>
     <div role="tabpanel" class="col-lg-12 padding0">
         <div class="mB20">
-          <h4><b>Name:</b> <span class="black">{{details.values.name}}</span></h2>
-          <h4><b>Description:</b> <span class="black">{{details.values.description}}</span></h4>
-          <h4 data-ng-show="isTable" data-disable="!tableName" data-select="onActivate('io')"><span class="lineage">Lineage</span> <ng-include data-table-type="io" src="'/modules/lineage/views/lineage_io.html'"/></h4> 
+            <h4 ng-if="details.values && details.values.name && details.values.name != ''">
+            <b>Name:</b> <span class="black">{{details.values.name}}</span></h2>
+            <h4 ng-if="details.values && details.values.description && details.values.description != ''"><b>Description:</b> <span class="black">{{details.values.description}}</span></h4>
+            <h4 data-ng-show="isTable" data-disable="!tableName" data-select="onActivate('io')">
+                <span class="lineage">Lineage</span> 
+                <ng-include data-table-type="io" src="'/modules/lineage/views/lineage_io.html'"/>
+            </h4>
         </div>
         <tabset>
             <tab heading="Details">
                 <table class="table table-bordered">
                     <thead>
-                    <tr>
-                        <th>Key</th>
-                        <th>Value</th>
-                    </tr>
+                        <tr>
+                            <th>Key</th>
+                            <th>Value</th>
+                        </tr>
                     </thead>
                     <tbody>
-                   <tr data-ng-repeat="(key,value) in details.values" ng-if="value && !(key==='columns') && !(key==='name') && !(key==='description')">
-
-                        <td>{{key}}</td>   
-
-                        <td data-ng-if="isObject(value) && isString(value.id)" class="pointer"> 
-                            <a data-ui-sref="details({id:value.id})">{{ value.id }}</a>
-                         </td>
-
-                        <td data-ng-if="isObject(value) && isObject(value.id) && isString(value.id.id)" class="pointer"><a data-ui-sref="details({id:value.id.id})">{{ value.id.id }}</a></td>
-
-                        <td data-ng-if="isArray(value)">
-                          <div class="row" data-ng-repeat="(key1, value1) in value" ng-if="value1">
-                              <div data-ng-if="isObject(value1)" data-ng-repeat="(key2, value2) in value1" > 
-                                <a data-ng-if="isString(value2) && key2 == 'id'" class="pointer pdLft15px" data-ui-sref="details({id:value2})">{{ value2 }}</a> 
-                              </div>
-                          </div>      
-                        </td> 
-
-                        <td data-ng-if="!isArray(value) && isObject(value[0]) && isString(value[0].id) && key=='inputTables'" data-ng-click="goDetails(value[0].id)" class="pointer">
-                         
-                          <div class="row" data-ng-repeat="(key1, value1) in value[0]" ng-if="value1">
-                              <div class="col-md-6" data-ng-if="!isString(value1)" data-ng-repeat="(key2, value2) in value1 track by $index"></div>
-                              <div data-ng-if="isString(value2)" data-ng-repeat="(key3, value3) in value2"> {{key3}}: {{value3}}</div>
-                              <div class="col-md-6" data-ng-if="isString(value1)"> {{key1}} : {{value1 | date:'medium'}} UTC</div>
-                          </div>
-                          
-                        </td>
-
-                        <td data-ng-if="isNumber(value)">{{value * 1000 | date:'yyyy-MM-dd HH:mm:ss'}} UTC</td> 
-
-                        <td data-ng-if="isString(value)">{{value}}</td> 
-
-                    </tr>
+                        <tr data-ng-repeat="(key,value) in details.values" ng-if="value && !(key==='columns') && !(key==='name') && !(key==='description')">
+                            <td>{{key}}</td>
+                            <td data-ng-if="isObject(value) && isString(value.id)" class="pointer"> 
+                                <a data-ui-sref="details({id:value.id})">{{ value.id }}</a>
+                            </td>
+                            <td data-ng-if="isObject(value) && isObject(value.id) && isString(value.id.id)" class="pointer">  <a data-ui-sref="details({id:value.id.id})">{{ value.id.id }}</a>
+                            </td>
+                            <td data-ng-if="isArray(value)">
+                                <div class="row" data-ng-repeat="(key1, value1) in value" ng-if="value1">
+                                    <div data-ng-if="isObject(value1)" data-ng-repeat="(key2, value2) in value1" > 
+                                        <a data-ng-if="isString(value2) && key2 == 'id'" class="pointer pdLft15px" data-ui-sref="details({id:value2})">{{ value2 }}</a> 
+                                    </div>
+                                </div>
+                            </td>
+                            <td data-ng-if="!isArray(value) && isObject(value[0]) && isString(value[0].id) && key=='inputTables'" data-ng-click="goDetails(value[0].id)" class="pointer">
+                                <div class="row" data-ng-repeat="(key1, value1) in value[0]" ng-if="value1">
+                                    <div class="col-md-6" data-ng-if="!isString(value1)" data-ng-repeat="(key2, value2) in value1 track by $index"></div>
+                                    <div data-ng-if="isString(value2)" data-ng-repeat="(key3, value3) in value2"> {{key3}}: {{value3}}</div>
+                                    <div class="col-md-6" data-ng-if="isString(value1)"> {{key1}} : {{value1 | date:'medium'}} UTC</div>
+                                </div>
+                            </td>
+                            <td data-ng-if="isNumber(value)">{{value * 1000 | date:'yyyy-MM-dd HH:mm:ss'}} UTC</td>
+                            <td data-ng-if="isString(value)">{{value}}</td>
+                        </tr>
                     </tbody>
-                </table> 
+                </table>
             </tab>
-           <tab data-heading="Schema" data-ng-if="isTable">
-              <ng-include src="'/modules/details/views/schema.html'"/>
+            <tab data-heading="Schema" data-ng-if="isSchema">
+                <ng-include src="'/modules/details/views/schema.html'"/>
             </tab>
             <tab data-heading="Tags" data-ng-if="isTags">
-              <ng-include  src="'/modules/tags/instance/views/tags.html'"/>
-            </tab> 
+                <ng-include  src="'/modules/tags/instance/views/tags.html'"/>
+            </tab>
         </tabset>
     </div>
-</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/details/views/schema.html
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/details/views/schema.html b/dashboard/public/modules/details/views/schema.html
index 8426473..1f09f5a 100644
--- a/dashboard/public/modules/details/views/schema.html
+++ b/dashboard/public/modules/details/views/schema.html
@@ -1,35 +1,48 @@
+
+
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
+    ~ Licensed to the Apache Software Foundation (ASF) under one
+    ~ or more contributor license agreements.  See the NOTICE file
+    ~ distributed with this work for additional information
+    ~ regarding copyright ownership.  The ASF licenses this file
+    ~ to you under the Apache License, Version 2.0 (the
+    ~ "License"); you may not use this file except in compliance
+    ~ with the License.  You may obtain a copy of the License at
+    ~
+    ~     http://www.apache.org/licenses/LICENSE-2.0
+    ~
+    ~ Unless required by applicable law or agreed to in writing, software
+    ~ distributed under the License is distributed on an "AS IS" BASIS,
+    ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    ~ See the License for the specific language governing permissions and
+    ~ limitations under the License.
+    -->
 <table class="table table-bordered">
     <thead>
-    <tr>
-        <th>Name</th>
-        <th>Comment</th>
-        <th>DataType</th>
-    </tr>
+        <tr>
+            <th>Name</th>
+            <th>Comment</th>
+            <th ng-if="!isHiveSchema">DataType</th>
+            <th ng-if="isHiveSchema">Type</th>
+            <th ng-if="isTraitId">Tags </th>
+            <th ng-if="isTraitId">Tools</th>
+        </tr>
     </thead>
     <tbody>
-    <tr ng-repeat="colm in details.values.columns">
-        <td> {{colm.values.name}}</td>
-        <td>{{colm.values.comment}}</td>
-        <td> {{colm.values.dataType}}</td>
-
-    </tr>
-
+        <tr ng-repeat="colm in schema">
+            <td> 
+                <a ng-if="colm['$id$']" data-ui-sref="details({id:colm['$id$'].id})">{{colm.name}}</a> 
+                <span ng-if="!colm['$id$']"> {{colm.name}} </span>
+            </td>
+            <td>{{colm.comment}}</td>
+            <td ng-if="!isHiveSchema"> {{colm.dataType}}</td>
+            <td ng-if="isHiveSchema"> {{colm.type}}</td>
+            <td ng-if="colm['$id$']">
+                <div id="{{colm['$id$'].id}}_schema" class="wordBreak"><a class="tabsearchanchor" ng-repeat="(key, value) in colm['$traits$']" data-ui-sref="search({query: key})" title="{{key}}">{{key}}<span> </span></a></div>
+            </td>
+            <td ng-if="colm['$id$']" class="addTag">
+                <img ng-src="img/addTag.png" tooltip="Add Tag" ng-click="openAddTagHome(colm['$id$'].id )">
+            </td>
+        </tr>
     </tbody>
 </table>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/search/searchController.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/search/searchController.js b/dashboard/public/modules/search/searchController.js
index 103c274..c7d5728 100644
--- a/dashboard/public/modules/search/searchController.js
+++ b/dashboard/public/modules/search/searchController.js
@@ -191,7 +191,7 @@ angular.module('dgc.search').controller('SearchController', ['$scope', '$locatio
         };
         $scope.openAddTagHome = function(traitId) {
             $state.go('addTagHome', {
-                id: traitId
+                tId: traitId
             });
         };
         $scope.isTag = function(typename) {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/search/searchRoutes.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/search/searchRoutes.js b/dashboard/public/modules/search/searchRoutes.js
index c9bf1c0..3c061bc 100644
--- a/dashboard/public/modules/search/searchRoutes.js
+++ b/dashboard/public/modules/search/searchRoutes.js
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 'use strict';
 
 //Setting up route
@@ -28,7 +27,10 @@ angular.module('dgc.search').config(['$stateProvider',
         });
         $stateProvider.state('addTagHome', {
             parent: 'search',
-            params: { id:null},
+            params: {
+                tId: null,
+                 frm : 'search'
+            },
             onEnter: ['$stateParams', '$state', '$modal', 'NavigationResource', function($stateParams, $state, $modal, NavigationResource) {
                 $modal.open({
                     templateUrl: '/modules/tags/instance/views/createTag.html',
@@ -45,4 +47,4 @@ angular.module('dgc.search').config(['$stateProvider',
             }]
         });
     }
-]);
+]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/search/views/search.html
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/search/views/search.html b/dashboard/public/modules/search/views/search.html
index 594d790..4bb59af 100644
--- a/dashboard/public/modules/search/views/search.html
+++ b/dashboard/public/modules/search/views/search.html
@@ -81,7 +81,9 @@
                         
                         <span data-ng-if="res.toLowerCase().indexOf('time') != -1 && isNumber(result[res])">{{result[res] * 1000 | date:'yyyy-MM-dd HH:mm:ss'}} UTC</span> 
                         
-                        <a data-ng-if="res.toLowerCase().indexOf('name') != -1" data-ui-sref="details({id:result['id']|| result['guid']})">{{result[res]}}</a>
+                        <a data-ng-if="res.toLowerCase().indexOf('name') != -1 && result['id']" data-ui-sref="details({id:result['id']|| result['guid']})">{{result[res]}}</a>
+
+                        <span data-ng-if="res.toLowerCase().indexOf('name') != -1 && !result['id']">{{result[res]}}</span> 
                         
                         <div data-ng-if="res == '$traits$'" class="wordBreak tags" id="{{result['id']|| result['guid']}}">
                            <a class="tabsearchanchor" ng-repeat="(key, value) in result[res]" data-ui-sref="search({query: key})" title="{{key}}">{{key}}<span> </span></a>

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/tags/instance/createTagController.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/tags/instance/createTagController.js b/dashboard/public/modules/tags/instance/createTagController.js
index ba564c9..b8e8c9f 100644
--- a/dashboard/public/modules/tags/instance/createTagController.js
+++ b/dashboard/public/modules/tags/instance/createTagController.js
@@ -42,8 +42,7 @@ angular.module('dgc.tags.instance').controller('CreateTagController', ['$scope',
 
                     for (var t = 0; t < traitTypes.length; t++) {
                         if (traitTypes[t]) {
-                           for(var indx = 0; indx < traitTypes[t].attributeDefinitions.length; indx++)
-                            { 
+                            for (var indx = 0; indx < traitTypes[t].attributeDefinitions.length; indx++) {
                                 var attrDefn = traitTypes[t].attributeDefinitions[indx];
                                 $scope.propertiesList[attrDefn.name] = '';
                                 $scope.isRequired[attrDefn.name] = attrDefn.isRequired;
@@ -67,14 +66,18 @@ angular.module('dgc.tags.instance').controller('CreateTagController', ['$scope',
                     "values": $scope.propertiesList
                 };
                 DetailsResource.saveTag({
-                    id: $stateParams.id
+                    id: $stateParams.tId
                 }, requestObject).$promise.then(function(data) {
-                    if (data.requestId !== undefined && data.GUID === $stateParams.id) {
+                    if (data.requestId !== undefined && data.GUID === $stateParams.tId) {
                         var tagName = $$("#tagDefinition").val();
-                        $rootScope.updateTags(true, {
-                            added: $scope.selectedType
-                        });
-                        $$("#" + $stateParams.id).append("<a class='tabsearchanchor ng-binding ng-scope' data-ui-sref='search({query: " + tagName + "})' title='" + tagName + "' href='#!/search?query=" + tagName + "'>" + tagName + "<span> </span></a>");
+                        if($stateParams.frm && $stateParams.frm !== 'details'){ 
+                            $rootScope.updateTags(true, {
+                                added: $scope.selectedType
+                            });
+                            $$("#" + $stateParams.tId).append("<a class='tabsearchanchor ng-binding ng-scope' data-ui-sref='search({query: " + tagName + "})' title='" + tagName + "' href='#!/search?query=" + tagName + "'>" + tagName + "<span> </span></a>");
+                        }else if($stateParams.frm === 'details'){
+                            $$("#" + $stateParams.tId+"_schema").append("<a class='tabsearchanchor ng-binding ng-scope' data-ui-sref='search({query: " + tagName + "})' title='" + tagName + "' href='#!/search?query=" + tagName + "'>" + tagName + "<span> </span></a>");
+                        }  
                     }
                     NotificationService.info('Tag "' + $scope.selectedType + '" has been added to entity', true);
                     $modalInstance.close(true);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/tags/instance/instanceTagsController.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/tags/instance/instanceTagsController.js b/dashboard/public/modules/tags/instance/instanceTagsController.js
index 754f2cb..70156c1 100644
--- a/dashboard/public/modules/tags/instance/instanceTagsController.js
+++ b/dashboard/public/modules/tags/instance/instanceTagsController.js
@@ -61,7 +61,7 @@ angular.module('dgc.tags.instance').controller('InstanceTagController', ['$scope
 
         $scope.openAddTag = function() {
             $state.go('addTag', {
-                id: $scope.id
+                tId: $scope.id
             });
         };
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/dashboard/public/modules/tags/tagsRoutes.js
----------------------------------------------------------------------
diff --git a/dashboard/public/modules/tags/tagsRoutes.js b/dashboard/public/modules/tags/tagsRoutes.js
index 5d768a5..1359931 100755
--- a/dashboard/public/modules/tags/tagsRoutes.js
+++ b/dashboard/public/modules/tags/tagsRoutes.js
@@ -26,6 +26,10 @@ angular.module('dgc.tags').config(['$stateProvider',
         });
         $stateProvider.state('addTag', {
             parent: 'details',
+            params: {
+                tId: null,
+                frm : 'addTag'
+            },
             onEnter: ['$stateParams', '$state', '$modal', 'NavigationResource', function($stateParams, $state, $modal, NavigationResource) {
                 $modal.open({
                     templateUrl: '/modules/tags/instance/views/createTag.html',

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/532d6cec/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 178b8d0..ef856c8 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -14,6 +14,7 @@ ATLAS-54 Rename configs in hive hook (shwethags)
 ATLAS-3 Mixed Index creation fails with Date types (sumasai via shwethags)
 
 ALL CHANGES:
+ATLAS-376 UI: Use the Schema API of the backend to populate details for Schema tab (darshankumar89 via sumasai)
 ATLAS-380 Fix ATLAS source artifact generation (sumasai)
 ATLAS-354 Kerberized cluster: quick_start.py fails to add sample data (shwethags)
 ATLAS-47 Entity mutations for complex types (sumasai via shwethags)