You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by kb...@apache.org on 2017/02/23 15:07:08 UTC
[1/2] incubator-atlas git commit: ATLAS-1487 : Create Entity in UI :
types list doesn't list fs_permissions (struct type) hence no entity could be
created for it.
Repository: incubator-atlas
Updated Branches:
refs/heads/master 4ed4ba15a -> e1524d3b4
ATLAS-1487 : Create Entity in UI : types list doesn't list fs_permissions (struct type) hence no entity could be created for it.
Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/fa0d6dbe
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/fa0d6dbe
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/fa0d6dbe
Branch: refs/heads/master
Commit: fa0d6dbef00f9307578162bc8ccc883cb0c2fc4c
Parents: 4ed4ba1
Author: kevalbhatt <kb...@apache.org>
Authored: Thu Feb 23 20:01:57 2017 +0530
Committer: kevalbhatt <kb...@apache.org>
Committed: Thu Feb 23 20:29:01 2017 +0530
----------------------------------------------------------------------
3party-licenses/bootstrap-datepicker-LICENSE | 21 +++++
LICENSE | 3 +
dashboardv2/public/js/main.js | 22 ++++-
dashboardv2/public/js/router/Router.js | 21 +++--
.../public/js/utils/CommonViewFunction.js | 37 ++------
dashboardv2/public/js/utils/Utils.js | 38 +++++++-
.../views/business_catalog/SideNavLayoutView.js | 5 +-
.../views/detail_page/DetailPageLayoutView.js | 11 ++-
.../js/views/entity/CreateEntityLayoutView.js | 99 ++++++++++++--------
.../js/views/search/SearchDetailLayoutView.js | 5 +-
.../public/js/views/search/SearchLayoutView.js | 28 +++---
.../js/views/search/SearchResultLayoutView.js | 7 +-
.../public/js/views/tag/CreateTagLayoutView.js | 2 +-
.../views/tag/TagAttributeDetailLayoutView.js | 7 +-
.../public/js/views/tag/TagDetailLayoutView.js | 5 +-
.../public/js/views/tag/TagLayoutView.js | 4 +-
.../public/js/views/tag/addTagModalView.js | 13 ++-
17 files changed, 210 insertions(+), 118 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/3party-licenses/bootstrap-datepicker-LICENSE
----------------------------------------------------------------------
diff --git a/3party-licenses/bootstrap-datepicker-LICENSE b/3party-licenses/bootstrap-datepicker-LICENSE
new file mode 100644
index 0000000..3fd94fa
--- /dev/null
+++ b/3party-licenses/bootstrap-datepicker-LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jonathan Peterson (@Eonasdan)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index b091595..48b983c 100755
--- a/LICENSE
+++ b/LICENSE
@@ -250,4 +250,7 @@ MIT License. For details, see 3party-licenses/es5-shim-LICENSE
This product bundles Respond, which is available under
MIT License. For details, see 3party-licenses/Respond-LICENSE
+
+This product bundles bootstrap-datepicker 4.14.30, which is available under
+MIT License. For details, see 3party-licenses/bootstrap-datepicker-LICENSE
=======================================================================
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/main.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js
index ded9e1b..39e6d57 100644
--- a/dashboardv2/public/js/main.js
+++ b/dashboardv2/public/js/main.js
@@ -161,18 +161,22 @@ require(['App',
'utils/Globals',
'utils/UrlLinks',
'collection/VEntityList',
+ 'collection/VTagList',
'utils/Overrides',
'bootstrap',
'd3',
'select2'
-], function(App, Router, CommonViewFunction, Globals, UrlLinks, VEntityList) {
+], function(App, Router, CommonViewFunction, Globals, UrlLinks, VEntityList, VTagList) {
var that = this;
- this.asyncFetchCounter = 2;
+ this.asyncFetchCounter = 3;
this.entityDefCollection = new VEntityList();
- that.entityDefCollection.url = UrlLinks.entitiesDefApiUrl();
+ this.entityDefCollection.url = UrlLinks.entitiesDefApiUrl();
+ this.typeHeaders = new VTagList();
+ this.typeHeaders.url = UrlLinks.typesApiUrl();
App.appRouter = new Router({
- entityDefCollection: this.entityDefCollection
+ entityDefCollection: this.entityDefCollection,
+ typeHeaders: this.typeHeaders
});
var startApp = function() {
@@ -210,7 +214,15 @@ require(['App',
startApp();
}
});
- that.entityDefCollection.fetch({
+ this.entityDefCollection.fetch({
+ skipDefaultError: true,
+ complete: function() {
+ --that.asyncFetchCounter;
+ startApp();
+ }
+ });
+ this.typeHeaders.fetch({
+ skipDefaultError: true,
complete: function() {
--that.asyncFetchCounter;
startApp();
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/router/Router.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/router/Router.js b/dashboardv2/public/js/router/Router.js
index ee3cd56..799cbc7 100644
--- a/dashboardv2/public/js/router/Router.js
+++ b/dashboardv2/public/js/router/Router.js
@@ -42,7 +42,7 @@ define([
'*actions': 'defaultAction'
},
initialize: function(options) {
- _.extend(this, _.pick(options, 'entityDefCollection'));
+ _.extend(this, _.pick(options, 'entityDefCollection', 'typeHeaders'));
this.showRegions();
this.bindCommonEvents();
this.listenTo(this, 'route', this.postRouteExecute, this);
@@ -111,7 +111,7 @@ define([
this.collection.url = url;
App.rNHeader.show(new BusinessCatalogHeader({ 'url': url, 'collection': this.collection }));
if (!App.rSideNav.currentView) {
- App.rSideNav.show(new SideNavLayoutView({ 'url': url, 'collection': that.tagCollection }));
+ App.rSideNav.show(new SideNavLayoutView({ 'url': url, 'collection': that.tagCollection, 'typeHeaders': that.typeHeaders }));
} else {
App.rSideNav.currentView.RBusinessCatalogLayoutView.currentView.manualRender("/" + url);
App.rSideNav.currentView.selectTab();
@@ -138,7 +138,7 @@ define([
this.entityCollection = new VEntityList([], {});
App.rNHeader.show(new Header());
if (!App.rSideNav.currentView) {
- App.rSideNav.show(new SideNavLayoutView({ 'collection': that.tagCollection }));
+ App.rSideNav.show(new SideNavLayoutView({ 'collection': that.tagCollection, 'typeHeaders': that.typeHeaders }));
} else {
App.rSideNav.currentView.selectTab();
}
@@ -146,6 +146,7 @@ define([
'collection': this.entityCollection,
'id': id,
'entityDefCollection': that.entityDefCollection,
+ 'typeHeaders': that.typeHeaders
}));
this.entityCollection.url = UrlLinks.entitiesApiUrl(id);
this.entityCollection.fetch({ reset: true });
@@ -164,6 +165,7 @@ define([
if (!App.rSideNav.currentView) {
App.rSideNav.show(new SideNavLayoutView({
'tag': tagName,
+ 'typeHeaders': that.typeHeaders,
'collection': that.tagCollection
}));
} else {
@@ -175,7 +177,8 @@ define([
App.rNContent.show(new TagDetailLayoutView({
'tag': tagName,
'entityDefCollection': that.entityDefCollection,
- 'collection': that.tagCollection
+ 'collection': that.tagCollection,
+ 'typeHeaders': that.typeHeaders
}));
}
});
@@ -192,7 +195,8 @@ define([
App.rNHeader.show(new Header());
if (!App.rSideNav.currentView) {
App.rSideNav.show(new SideNavLayoutView({
- 'collection': that.tagCollection
+ 'collection': that.tagCollection,
+ 'typeHeaders': that.typeHeaders
}));
} else {
App.rSideNav.currentView.selectTab();
@@ -206,7 +210,8 @@ define([
App.rNContent.show(new SearchDetailLayoutView({
'value': paramObj,
'entityDefCollection': that.entityDefCollection,
- 'initialView': true
+ 'initialView': true,
+ 'typeHeaders': that.typeHeaders
}))
} else {
App.rNContent.$el.html("");
@@ -227,7 +232,8 @@ define([
if (!App.rSideNav.currentView) {
App.rSideNav.show(new SideNavLayoutView({
'value': paramObj,
- 'collection': that.tagCollection
+ 'collection': that.tagCollection,
+ 'typeHeaders': that.typeHeaders
}));
} else {
App.rSideNav.currentView.RSearchLayoutView.currentView.manualRender(paramObj);
@@ -236,6 +242,7 @@ define([
App.rNContent.show(new SearchDetailLayoutView({
'value': paramObj,
'entityDefCollection': that.entityDefCollection,
+ 'typeHeaders': that.typeHeaders,
'initialView': paramObj.query.trim().length === 0
}));
});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/utils/CommonViewFunction.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/CommonViewFunction.js b/dashboardv2/public/js/utils/CommonViewFunction.js
index 318067b..4f90168 100644
--- a/dashboardv2/public/js/utils/CommonViewFunction.js
+++ b/dashboardv2/public/js/utils/CommonViewFunction.js
@@ -100,15 +100,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
var value = "",
deleteButton = "",
data = serverData.entity;
- if (data && data.attributes) {
- if (data.attributes.name) {
- value = data.attributes.name;
- } else if (data.attributes.qualifiedName) {
- value = data.attributes.qualifiedName;
- } else if (data.typeName) {
- value = data.typeName;
- }
- }
+ value = Utils.getName(data);
var id = "";
if (data.guid) {
if (Enums.entityStateReadOnly[data.status]) {
@@ -117,7 +109,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
id = data.guid;
}
if (value.length > 1) {
- scope.$('td div[data-id="' + id + '"]').html('<a href="#!/detailPage/' + id + '">' + _.escape(value) + '</a>');
+ scope.$('td div[data-id="' + id + '"]').html('<a href="#!/detailPage/' + id + '">' + value + '</a>');
} else {
scope.$('td div[data-id="' + id + '"]').html('<a href="#!/detailPage/' + id + '">' + _.escape(id) + '</a>');
}
@@ -169,25 +161,14 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
}
if (id && inputOutputField) {
- if (inputOutputField.attributes) {
- if (inputOutputField.attributes.name) {
- tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.attributes.name) + '</a>'
- } else if (inputOutputField.attributes.qualifiedName) {
- tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.attributes.qualifiedName) + '</a>'
- } else if (inputOutputField.typeName) {
- tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.typeName) + '</a>'
- } else {
- tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(id) + '</a>'
- }
- } else if (inputOutputField.name) {
- tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.name) + '</a>';
- } else if (inputOutputField.qualifiedName) {
- tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.qualifiedName) + '</a>'
- } else {
+ var name = Utils.getName(inputOutputField);
+ if (name === "-") {
var fetch = true;
var fetchId = (_.isObject(id) ? id.id : id);
fetchInputOutputValue(fetchId);
tempLink += '<div data-id="' + fetchId + '"></div>';
+ } else {
+ tempLink += '<a href="#!/detailPage/' + id + '">' + name + '</a>'
}
}
if (readOnly) {
@@ -316,7 +297,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
html = "",
id = obj.guid,
terms = [],
- entityName = (_.escape(obj.attributes && obj.attributes.name ? obj.attributes.name : null) || _.escape(obj.displayText) || obj.guid);
+ entityName = Utils.getName(obj);
if (traits) {
traits.map(function(term) {
if (term.split(".").length > 1) {
@@ -334,7 +315,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
className += "showHideDiv hide";
}
obj['valueUrl'] = CommonViewFunction.breadcrumbUrlMaker(obj.url);
- html += '<div class="' + className + '" dataterm-name="' + _.escape(obj.name) + '"><div class="liContent"></div>' + obj.deleteHtml + '</div>';
+ html += '<div class="' + className + '" dataterm-name="' + entityName + '"><div class="liContent"></div>' + obj.deleteHtml + '</div>';
})
if (terms.length > 1) {
html += '<div><a href="javascript:void(0)" data-id="showMoreLessTerm" class="inputTag inputTagGreen"><span>Show More </span><i class="fa fa-angle-right"></i></a></div>'
@@ -358,7 +339,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
addTag = "",
popTag = "",
count = 0,
- entityName = (_.escape(obj.attributes && obj.attributes.name ? obj.attributes.name : null) || _.escape(obj.displayText) || obj.guid);
+ entityName = Utils.getName(obj);
if (traits) {
traits.map(function(tag) {
if (tag.split(".").length === 1) {
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/utils/Utils.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/Utils.js b/dashboardv2/public/js/utils/Utils.js
index cbe7a2b..f214c50 100644
--- a/dashboardv2/public/js/utils/Utils.js
+++ b/dashboardv2/public/js/utils/Utils.js
@@ -330,7 +330,43 @@ define(['require', 'utils/Globals', 'pnotify', 'utils/Messages', 'pnotify.button
}
}
}
-
+ Utils.getName = function(collectionJSON, priorityAttribute) {
+ if (collectionJSON) {
+ if (collectionJSON.attributes && collectionJSON.attributes[priorityAttribute]) {
+ return _.escape(collectionJSON.attributes[priorityAttribute]);
+ }
+ if (collectionJSON[priorityAttribute]) {
+ return _.escape(collectionJSON[priorityAttribute]);
+ }
+ if (collectionJSON.attributes) {
+ if (collectionJSON.attributes.name) {
+ return _.escape(collectionJSON.attributes.name);
+ }
+ if (collectionJSON.attributes.qualifiedName) {
+ return _.escape(collectionJSON.attributes.qualifiedName);
+ }
+ if (collectionJSON.attributes.id) {
+ return _.escape(collectionJSON.attributes.id);
+ }
+ }
+ if (collectionJSON.name) {
+ return _.escape(collectionJSON.name);
+ }
+ if (collectionJSON.qualifiedName) {
+ return _.escape(collectionJSON.qualifiedName);
+ }
+ if (collectionJSON.displayText) {
+ return _.escape(collectionJSON.displayText);
+ }
+ if (collectionJSON.guid) {
+ return _.escape(collectionJSON.guid);
+ }
+ if (collectionJSON.id) {
+ return _.escape(collectionJSON.id);
+ }
+ }
+ return "-";
+ }
Utils.showTitleLoader = function(loaderEl, titleBoxEl) {
loaderEl.css({
'display': 'block',
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
index 9254213..d92a0e8 100644
--- a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
@@ -66,7 +66,7 @@ define(['require',
return events;
},
initialize: function(options) {
- _.extend(this, _.pick(options, 'url', 'value', 'tag', 'selectFirst', 'collection'));
+ _.extend(this, _.pick(options, 'url', 'value', 'tag', 'selectFirst', 'collection', 'typeHeaders'));
if (Globals.taxonomy) {
this.tabClass = "tab col-sm-4";
} else {
@@ -105,7 +105,8 @@ define(['require',
var that = this;
require(['views/search/SearchLayoutView'], function(SearchLayoutView) {
that.RSearchLayoutView.show(new SearchLayoutView({
- value: that.value
+ value: that.value,
+ typeHeaders: that.typeHeaders
}));
});
},
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index b67fe69..bba2e79 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -102,7 +102,7 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'collection', 'id', 'entityDefCollection'));
+ _.extend(this, _.pick(options, 'collection', 'id', 'entityDefCollection', 'typeHeaders'));
this.bindEvents();
},
bindEvents: function() {
@@ -122,18 +122,18 @@ define(['require',
this.$el.removeClass('readOnly');
}
if (collectionJSON) {
+ this.name = Utils.getName(collectionJSON);
if (collectionJSON.attributes) {
- this.name = (_.escape(collectionJSON.attributes && collectionJSON.attributes.name ? collectionJSON.attributes.name : null) || _.escape(collectionJSON.displayText) || collectionJSON.guid);
if (this.name && collectionJSON.typeName) {
- this.name = this.name + ' (' + collectionJSON.typeName + ')';
+ this.name = this.name + ' (' + _.escape(collectionJSON.typeName) + ')';
}
if (!this.name && collectionJSON.typeName) {
- this.name = collectionJSON.typeName;
+ this.name = _.escape(collectionJSON.typeName);
}
this.description = collectionJSON.attributes.description;
if (this.name) {
this.ui.title.show();
- var titleName = '<span>' + _.escape(this.name) + '</span>';
+ var titleName = '<span>' + this.name + '</span>';
if (this.readOnly) {
titleName += '<button title="Deleted" class="btn btn-atlasAction btn-atlas deleteBtn"><i class="fa fa-trash"></i> Deleted</button>';
}
@@ -348,6 +348,7 @@ define(['require',
var view = new CreateEntityLayoutView({
guid: that.id,
entityDefCollection: that.entityDefCollection,
+ typeHeaders: that.typeHeaders,
callback: function() {
that.fetchCollection();
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
index c2ca356..64916e5 100644
--- a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
+++ b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
@@ -72,7 +72,7 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'guid', 'callback', 'showLoader', 'entityDefCollection'));
+ _.extend(this, _.pick(options, 'guid', 'callback', 'showLoader', 'entityDefCollection', 'typeHeaders'));
var that = this,
entityTitle, okLabel;
this.searchCollection = new VSearchList();
@@ -150,16 +150,22 @@ define(['require',
}, this);
this.ui.entityInputData.on("keyup", "textarea", function() {
var value = this.value;
- try {
- if (value && value.length) {
- JSON.parse(value);
- $(this).removeClass('errorClass');
- that.modal.$el.find('button.ok').prop("disabled", false);
+ if (!value.length && $(this).hasClass('false')) {
+ $(this).removeClass('errorClass');
+ that.modal.$el.find('button.ok').prop("disabled", false);
+ } else {
+ try {
+ if (value && value.length) {
+ JSON.parse(value);
+ $(this).removeClass('errorClass');
+ that.modal.$el.find('button.ok').prop("disabled", false);
+ }
+ } catch (err) {
+ $(this).addClass('errorClass');
+ that.modal.$el.find('button.ok').prop("disabled", true);
}
- } catch (err) {
- $(this).addClass('errorClass');
- that.modal.$el.find('button.ok').prop("disabled", true);
}
+
});
if (this.guid) {
@@ -195,7 +201,7 @@ define(['require',
},
bindNonRequiredField: function() {
var that = this;
- this.ui.entityInputData.off('keyup change dp.change', 'input.false,select.false').on('keyup change dp.change', 'input.false,select.false', function(e) {
+ this.ui.entityInputData.off('keyup change', 'input.false,select.false').on('keyup change', 'input.false,select.false', function(e) {
if (that.modal.$el.find('button.ok').prop('disabled') && that.ui.entityInputData.find('.errorClass').length === 0) {
that.modal.$el.find('button.ok').prop("disabled", false);
}
@@ -221,7 +227,7 @@ define(['require',
value;
if (this.guid) {
this.collection.each(function(val) {
- name += _.escape(val.get("entity").attributes.name) || _.escape(val.get("entity").attributes.qualifiedName) || _.escape(val.get("entity").attributes.id);
+ name += Utils.getName(val.get("entity"));
that.entityData = val;
});
this.ui.assetName.html(name);
@@ -232,12 +238,13 @@ define(['require',
return model.get('name');
}
this.entityDefCollection.fullCollection.sort().each(function(val) {
+ var name = Utils.getName(val.toJSON());
if (Globals.entityTypeConfList) {
if (_.isEmptyArray(Globals.entityTypeConfList)) {
- str += '<option>' + _.escape(val.get("name")) + '</option>';
+ str += '<option>' + name + '</option>';
} else {
if (_.contains(Globals.entityTypeConfList, val.get("name"))) {
- str += '<option>' + _.escape(val.get("name")) + '</option>';
+ str += '<option>' + name + '</option>';
}
}
}
@@ -321,7 +328,7 @@ define(['require',
var that = this;
this.collection.url = UrlLinks.entitiesDefApiUrl(entityName);
this.collection.modelAttrName = 'attributeDefs';
- this.asyncFetchCounter++;
+ ++this.asyncFetchCounter;
this.collection.fetch({
success: function(model, data) {
that.subAttributeData(data);
@@ -339,7 +346,8 @@ define(['require',
this.$('input[data-type="date"]').each(function() {
if (!$(this).data('datepicker')) {
$(this).datetimepicker({
- format: 'DD MMMM YYYY'
+ format: 'DD MMMM YYYY',
+ keepInvalid: true
});
}
});
@@ -411,7 +419,7 @@ define(['require',
getSelect: function(value, entityValue) {
if (value.typeName === "boolean") {
return '<select class="form-control row-margin-bottom ' + (value.isOptional === true ? "false" : "true") + '" data-type="' + value.typeName + '" data-key="' + value.name + '" data-id="entityInput">' +
- '<option disabled="disabled">--Select true or false--</option><option value="true">true</option>' +
+ '<option value="">--Select true or false--</option><option value="true">true</option>' +
'<option value="false">false</option></select>';
} else {
var splitTypeName = value.typeName.split("<");
@@ -481,7 +489,12 @@ define(['require',
} else if (typeName.indexOf("map") > -1) {
return this.getTextArea(value, entityValue);
} else {
- return this.getInput(value, entityValue);
+ var typeNameCategory = this.typeHeaders.fullCollection.findWhere({ name: typeName });
+ if (typeNameCategory && typeNameCategory.get('category') === 'STRUCT') {
+ return this.getTextArea(value, entityValue);
+ } else {
+ return this.getInput(value, entityValue);
+ }
}
},
okButton: function() {
@@ -546,7 +559,7 @@ define(['require',
if ($(this).hasClass("true")) {
if (value == "" || value == undefined) {
if ($(this).data('select2')) {
- $(this).data('select2').$container.addClass("errorClass")
+ $(this).data('select2').$container.find('.select2-selection').addClass("errorClass")
} else {
$(this).addClass('errorClass');
}
@@ -557,6 +570,7 @@ define(['require',
}
var dataTypeEnitity = $(this).data('type');
var datakeyEntity = $(this).data('key');
+ var typeNameCategory = that.typeHeaders.fullCollection.findWhere({ name: dataTypeEnitity });
// Extract Data
if (dataTypeEnitity && datakeyEntity) {
@@ -564,7 +578,7 @@ define(['require',
entity[datakeyEntity] = extractValue(value);
} else if (typeof dataTypeEnitity === 'string' && datakeyEntity.indexOf("Time") > -1) {
entity[datakeyEntity] = Date.parse(value);
- } else if (dataTypeEnitity.indexOf("map") > -1) {
+ } else if (dataTypeEnitity.indexOf("map") > -1 || (typeNameCategory && typeNameCategory.get('category') === 'STRUCT')) {
try {
if (value && value.length) {
parseData = JSON.parse(value);
@@ -587,7 +601,6 @@ define(['require',
} else {
entity[datakeyEntity] = value;
}
-
}
}
});
@@ -644,45 +657,53 @@ define(['require',
hideLoader: function() {
this.$('.entityLoader').hide();
this.$('.entityInputData').show();
+ // To enable scroll after selecting value from select2.
+ this.ui.entityList.select2('open');
+ this.ui.entityList.select2('close');
},
addJsonSearchData: function() {
if (this.asyncFetchLOVCounter === 0) {
var that = this,
queryText,
- str = '';
- // Add oprions in select
- if (this.selectStoreCollection.length) {
- var appendOption = function(optionValue) {
+ str = '',
+ appendOption = function(optionValue) {
var obj = optionValue.toJSON(),
- labelName = (_.escape(obj.displayText) || _.escape(obj.attributes && obj.attributes.name ? obj.attributes.name : null) || obj.guid);
+ labelName = Utils.getName(obj, 'displayText');
if (obj && obj.queryText) {
optionValue.set('labelName', labelName);
if (labelName) {
- var str = '<option>' + _.escape(labelName) + '</option>';
+ var str = '<option>' + labelName + '</option>';
}
+ // appending value to all same droupdown
that.$('select[data-queryData="' + obj.queryText + '"]').append(str);
}
- }
- _.each(this.selectStoreCollection.models, function(value) {
- var obj = value.toJSON();
- if (obj.status) {
- if (!Enums.entityStateReadOnly[obj.status]) {
- appendOption(value);
- }
- } else {
- appendOption(value);
- }
- });
- }
+ };
- $('select[data-id="entitySelectData"]').each(function(value, key) {
+ this.$('select[data-id="entitySelectData"]').each(function(value, key) {
var $this = $(this),
keyData = $(this).data("key"),
typeData = $(this).data("type"),
+ queryData = $(this).data("querydata"),
placeholderName = "Select a " + typeData + " from the dropdown list";
+ //add options.
+ if (that.selectStoreCollection.length && !this.options.length) {
+ that.selectStoreCollection.where({ queryText: queryData }).forEach(function(model) {
+ var obj = model.toJSON();
+ if (obj.status) {
+ if (!Enums.entityStateReadOnly[obj.status]) {
+ appendOption(model);
+ }
+ } else {
+ appendOption(model);
+ }
+ });
+ }
+
+
$this.attr("multiple", ($this.data('type').indexOf("array") === -1 ? false : true));
+ // Select Value.
if (that.guid) {
var dataValue = that.entityData.get("entity").attributes[keyData];
var selectedValue = [];
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchDetailLayoutView.js b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
index e2af90b..73bbb97 100644
--- a/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
@@ -43,7 +43,7 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection'));
+ _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection', 'typeHeaders'));
},
bindEvents: function() {},
onRender: function() {
@@ -65,7 +65,8 @@ define(['require',
value: value,
tag: that.tag,
initialView: that.initialView,
- entityDefCollection: that.entityDefCollection
+ entityDefCollection: that.entityDefCollection,
+ typeHeaders: that.typeHeaders
}));
}
});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/search/SearchLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js b/dashboardv2/public/js/views/search/SearchLayoutView.js
index d1f0591..df7e448 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -19,11 +19,10 @@
define(['require',
'backbone',
'hbs!tmpl/search/SearchLayoutView_tmpl',
- 'collection/VTagList',
'utils/Utils',
'utils/UrlLinks',
'utils/Globals',
-], function(require, Backbone, SearchLayoutViewTmpl, VTagList, Utils, UrlLinks, Globals) {
+], function(require, Backbone, SearchLayoutViewTmpl, Utils, UrlLinks, Globals) {
'use strict';
var SearchLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -72,9 +71,7 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'value'));
- this.typecollection = new VTagList([], {});
- this.typecollection.url = UrlLinks.typesApiUrl();
+ _.extend(this, _.pick(options, 'value', 'typeHeaders'));
this.type = "fulltext";
var param = Utils.getUrlState.getQueryParams();
this.query = {
@@ -89,10 +86,9 @@ define(['require',
if (param && param.query && param.searchType) {
this.query[param.searchType].query = param.query;
}
- this.bindEvents();
},
bindEvents: function(param) {
- this.listenTo(this.typecollection, "reset", function(value) {
+ this.listenTo(this.typeHeaders, "reset", function(value) {
this.renderTypeList();
this.setValues();
this.ui.typeLov.select2({
@@ -104,11 +100,17 @@ define(['require',
onRender: function() {
// array of tags which is coming from url
this.$('.typeLOV').hide();
- this.fetchCollection();
+ this.renderTypeList();
+ this.setValues();
+ this.ui.typeLov.select2({
+ placeholder: "Search For",
+ allowClear: true
+ });
this.ui.searchBtn.attr("disabled", "true");
+ this.bindEvents();
},
fetchCollection: function(value) {
- this.typecollection.fetch({ reset: true });
+ this.typeHeaders.fetch({ reset: true });
},
onRefreshButton: function() {
this.fetchCollection();
@@ -120,12 +122,12 @@ define(['require',
var that = this;
this.ui.typeLov.empty();
var str = '<option></option>';
- this.typecollection.fullCollection.comparator = function(model) {
- return model.get('name').toLowerCase();
+ this.typeHeaders.fullCollection.comparator = function(model) {
+ return Utils.getName(model.toJSON(), 'name').toLowerCase();
}
- this.typecollection.fullCollection.sort().each(function(model) {
+ this.typeHeaders.fullCollection.sort().each(function(model) {
if (model.get('category') == 'ENTITY') {
- str += '<option>' + _.escape(model.get("name")) + '</option>';
+ str += '<option>' + (Utils.getName(model.toJSON(), 'name')) + '</option>';
}
});
that.ui.typeLov.html(str);
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/search/SearchResultLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index 85d642f..8dce5be 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -122,7 +122,7 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection'));
+ _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection', 'typeHeaders'));
var pagination = "";
this.entityModel = new VEntity();
this.searchCollection = new VSearchList();
@@ -355,7 +355,8 @@ define(['require',
var obj = model.get('entity');
}
var nameHtml = "";
- var name = (_.escape(obj.attributes && obj.attributes.name ? obj.attributes.name : null) || _.escape(obj.displayText) || obj.guid)
+
+ var name = Utils.getName(obj);
if (obj.guid) {
nameHtml = '<a title="' + name + '" href="#!/detailPage/' + obj.guid + '">' + name + '</a>';
} else {
@@ -651,6 +652,7 @@ define(['require',
var view = new CreateEntityLayoutView({
guid: guid,
entityDefCollection: that.entityDefCollection,
+ typeHeaders: that.typeHeaders,
callback: function() {
that.fetchCollection();
}
@@ -665,6 +667,7 @@ define(['require',
], function(CreateEntityLayoutView) {
var view = new CreateEntityLayoutView({
entityDefCollection: that.entityDefCollection,
+ typeHeaders: that.typeHeaders,
callback: function() {
that.fetchCollection();
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
index 41f8886..957a056 100644
--- a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
@@ -98,7 +98,7 @@ define(['require',
that = this;
this.ui.parentTag.empty();
this.tagCollection.fullCollection.each(function(val) {
- str += '<option>' + _.escape(val.get("name")) + '</option>';
+ str += '<option>' + (Utils.getName(val.toJSON())) + '</option>';
});
that.ui.parentTag.html(str);
// IE9 support
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
index 49ab735..2b65733 100644
--- a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
@@ -101,9 +101,8 @@ define(['require',
renderTagDetail: function() {
var attributeData = "",
attributeDefs = this.model.get("attributeDefs");
- if (this.model.get("name")) {
- this.ui.title.html('<span>' + _.escape(this.model.get("name")) + '</span>');
- }
+
+ this.ui.title.html('<span>' + (Utils.getName(this.model.toJSON())) + '</span>');
if (this.model.get("description")) {
this.ui.description.text(this.model.get("description"));
}
@@ -112,7 +111,7 @@ define(['require',
attributeDefs = [attributeDefs];
}
_.each(attributeDefs, function(value, key) {
- attributeData += '<span class="inputAttribute">' + _.escape(value.name) + '</span>';
+ attributeData += '<span class="inputAttribute">' + (Utils.getName(value)) + '</span>';
});
this.ui.showAttribute.html(attributeData);
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
index cebc104..d342b96 100644
--- a/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
@@ -44,7 +44,7 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'tag', 'collection', 'entityDefCollection'));
+ _.extend(this, _.pick(options, 'tag', 'collection', 'entityDefCollection', 'typeHeaders'));
},
bindEvents: function() {},
onRender: function() {
@@ -61,7 +61,8 @@ define(['require',
that.RSearchResultLayoutView.show(new SearchResultLayoutView({
value: value,
entityDefCollection: that.entityDefCollection,
- tag: that.tag
+ tag: that.tag,
+ typeHeaders: that.typeHeaders
}));
});
},
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/tag/TagLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagLayoutView.js b/dashboardv2/public/js/views/tag/TagLayoutView.js
index 87967c5..4b2f5e7 100644
--- a/dashboardv2/public/js/views/tag/TagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagLayoutView.js
@@ -140,10 +140,10 @@ define(['require',
var that = this,
str = '';
that.collection.fullCollection.comparator = function(model) {
- return model.get('name').toLowerCase();
+ return Utils.getName(model.toJSON(), 'name').toLowerCase();
};
that.collection.fullCollection.sort().each(function(model) {
- var name = _.escape(model.get('name'));
+ var name = Utils.getName(model.toJSON(), 'name');
if (name.indexOf(".") > -1) {
return;
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/fa0d6dbe/dashboardv2/public/js/views/tag/addTagModalView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/addTagModalView.js b/dashboardv2/public/js/views/tag/addTagModalView.js
index f2e19fe..559b2d5 100644
--- a/dashboardv2/public/js/views/tag/addTagModalView.js
+++ b/dashboardv2/public/js/views/tag/addTagModalView.js
@@ -77,7 +77,7 @@ define(['require',
}
if (that.multiple) {
_.each(that.multiple, function(entity, i) {
- var name = (_.escape(entity.model.attributes && entity.model.attributes.name ? entity.model.attributes.name : null) || _.escape(entity.model.displayText) || entity.model.guid)
+ var name = Utils.getName(entity.model);
if (Enums.entityStateReadOnly[entity.model.status]) {
obj.deletedEntity.push(name);
} else {
@@ -187,13 +187,15 @@ define(['require',
tagsCollection: function() {
var that = this;
this.collection.fullCollection.comparator = function(model) {
- return model.get('name').toLowerCase();
+ return Utils.getName(model.toJSON(), 'name').toLowerCase();
}
var str = '<option selected="selected" disabled="disabled">-- Select a tag from the dropdown list --</option>';
this.collection.fullCollection.sort().each(function(obj, key) {
+ var name = Utils.getName(obj.toJSON(), 'name');
+ // using obj.get('name') insted of name variable because if html is presen in name then escaped name will not found in tagList.
if (_.indexOf(that.tagList, obj.get('name')) === -1) {
- str += '<option>' + _.escape(obj.get('name')) + '</option>';
+ str += '<option>' + name + '</option>';
}
});
this.ui.addTagOptions.html(str);
@@ -233,8 +235,9 @@ define(['require',
if (this.commonCollection.models[0]) {
if (this.commonCollection.models[0].get('attributeDefs')) {
_.each(this.commonCollection.models[0].get('attributeDefs'), function(obj) {
- that.ui.tagAttribute.append('<div class="form-group"><label>' + _.escape(obj.name) + '</label>' +
- '<input type="text" class="form-control attributeInputVal attrName" data-key="' + obj.name + '" ></input></div>');
+ var name = Utils.getName(obj, 'name');
+ that.ui.tagAttribute.append('<div class="form-group"><label>' + name + '</label>' +
+ '<input type="text" class="form-control attributeInputVal attrName" data-key="' + name + '" ></input></div>');
});
}
[2/2] incubator-atlas git commit: ATLAS-1590 Edit Button is enabled
for Deleted entities
Posted by kb...@apache.org.
ATLAS-1590 Edit Button is enabled for Deleted entities
Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/e1524d3b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/e1524d3b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/e1524d3b
Branch: refs/heads/master
Commit: e1524d3b434bf22985fb1ed4d7bef6827dc8375e
Parents: fa0d6db
Author: kevalbhatt <kb...@apache.org>
Authored: Thu Feb 23 20:22:22 2017 +0530
Committer: kevalbhatt <kb...@apache.org>
Committed: Thu Feb 23 20:36:47 2017 +0530
----------------------------------------------------------------------
dashboardv2/public/css/scss/main.scss | 2 +-
release-log.txt | 20 +++++++++++++-------
2 files changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/e1524d3b/dashboardv2/public/css/scss/main.scss
----------------------------------------------------------------------
diff --git a/dashboardv2/public/css/scss/main.scss b/dashboardv2/public/css/scss/main.scss
index e56173c..6f79bcf 100644
--- a/dashboardv2/public/css/scss/main.scss
+++ b/dashboardv2/public/css/scss/main.scss
@@ -313,7 +313,7 @@ ul {
}
button {
&.editbutton[data-id="editButton"] {
- display: none;
+ display: none !important;
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/e1524d3b/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 14c026a..31b8e71 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -9,13 +9,19 @@ ATLAS-1060 Add composite indexes for exact match performance improvements for al
ATLAS-1127 Modify creation and modification timestamps to Date instead of Long(sumasai)
ALL CHANGES:
-ATLAS-1502 - Fix for not getting atlas application properties using PropertiesConfiguration sometimes, so changed to ApplicationProperties (nixonrodrigues via kevalbhatt)
-ATLAS-1586: type search improvement by avoiding unnecessary instantiation of type objects (mneethiraj)
-ATLAS-1583: fix incorrect metrics by import API (ashutoshm via mneethiraj)
-ATLAS-1571: fix for incorrect v1->v2 conversion of enum-type value (mneethiraj)
-ATLAS-1576: fix for NPE while handling unknown attributes (mneethiraj)
-ATLAS-1577: audit event generated for an entity overwrites previous event for the entity (mneethiraj)
-ATLAS-1546: Changed to LOG.warn instead error in Hive hook should choose appropriate JAAS config if host uses kerberos ticket-cache (nixonrodrigues via kevalbhatt)
+ATLAS-1590 UI : Edit Button is enabled for Deleted entities. (kevalbhatt)
+ATLAS-1487 Create Entity in UI : types list doesn't list fs_permissions (struct type) hence no entity could be created for it. (kevalbhatt)
+ATLAS-1573 Full text mapping for Entity store V2
+ATLAS-1585 Search result page should show the entityType for each result (kevalbhatt via mneethiraj)
+ATLAS-1575 fix for UI issue in create/edit of hive_table entity (kevalbhatt via mneethiraj)
+ATLAS-1567 exclude hadoop-common library in Falcon hook packaging, as it is alreay present in Falcon classpath (nixonrodrigues via mneethiraj)
+ATLAS-1502 Fix for not getting atlas application properties using PropertiesConfiguration sometimes, so changed to ApplicationProperties (nixonrodrigues via kevalbhatt)
+ATLAS-1586 type search improvement by avoiding unnecessary instantiation of type objects (mneethiraj)
+ATLAS-1583 fix incorrect metrics by import API (ashutoshm via mneethiraj)
+ATLAS-1571 fix for incorrect v1->v2 conversion of enum-type value (mneethiraj)
+ATLAS-1576 fix for NPE while handling unknown attributes (mneethiraj)
+ATLAS-1577 audit event generated for an entity overwrites previous event for the entity (mneethiraj)
+ATLAS-1546 Changed to LOG.warn instead error in Hive hook should choose appropriate JAAS config if host uses kerberos ticket-cache (nixonrodrigues via kevalbhatt)
ATLAS-1569 Clear contents of RequestContextV1 at the end of the request (mneethiraj)
ATLAS-1570 Fix for Taxonomy service test failures (apoorvnaik via mneethiraj)
ATLAS-1568 moved helper methods from org.apache.atlas.model package classes into an utility class (mneethiraj)