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 2019/12/06 11:59:43 UTC
[atlas] branch master updated (65a62b0 -> 6435223)
This is an automated email from the ASF dual-hosted git repository.
kbhatt pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git.
from 65a62b0 ATLAS-3550 :- Add authorize check for partialUpdateEntityAttrByGuid API call
new e202e9e ATLAS-3482: UI: Support basic search to search with System attributes only for entity
new 6435223 ATLAS-3537 : UI: Allow users to search for deleted & shell entities from statistics popup
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
dashboardv2/public/js/main.js | 27 +++++++-
.../public/js/templates/site/entity_tmpl.html | 8 +--
dashboardv2/public/js/utils/CommonViewFunction.js | 79 ++++++++++++++++++----
dashboardv2/public/js/utils/Enums.js | 3 +-
dashboardv2/public/js/utils/UrlLinks.js | 6 ++
.../public/js/views/search/QueryBuilderView.js | 33 +++++++--
.../public/js/views/search/SearchLayoutView.js | 52 ++++++++++----
.../public/js/views/search/SearchQueryView.js | 12 +++-
.../js/views/search/SearchResultLayoutView.js | 24 +++++--
.../js/views/tag/TagAttributeDetailLayoutView.js | 10 ++-
dashboardv3/public/js/main.js | 27 +++++++-
.../public/js/templates/site/entity_tmpl.html | 8 +--
dashboardv3/public/js/utils/CommonViewFunction.js | 69 ++++++++++++++++---
dashboardv3/public/js/utils/Enums.js | 3 +-
dashboardv3/public/js/utils/UrlLinks.js | 6 ++
.../public/js/views/search/QueryBuilderView.js | 34 ++++++++--
.../js/views/search/SearchDefaultLayoutView.js | 23 ++++++-
.../views/search/SearchFilterBrowseLayoutView.js | 39 ++++++-----
.../public/js/views/search/SearchLayoutView.js | 14 ++--
.../public/js/views/search/SearchQueryView.js | 11 ++-
.../js/views/search/SearchResultLayoutView.js | 24 +++++--
.../search/tree/ClassificationTreeLayoutView.js | 34 +++++++++-
.../js/views/search/tree/EntityTreeLayoutView.js | 45 ++++++++++--
.../js/views/tag/TagAttributeDetailLayoutView.js | 10 ++-
24 files changed, 481 insertions(+), 120 deletions(-)
[atlas] 01/02: ATLAS-3482: UI: Support basic search to search with
System attributes only for entity
Posted by kb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kbhatt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
commit e202e9e483e41b00dc5309395e5daaa710fb6765
Author: sameer79 <fi...@yahoo.co.in>
AuthorDate: Fri Nov 22 21:18:11 2019 +0530
ATLAS-3482: UI: Support basic search to search with System attributes only for entity
---
dashboardv2/public/js/main.js | 27 +++++++-
dashboardv2/public/js/utils/CommonViewFunction.js | 79 ++++++++++++++++++----
dashboardv2/public/js/utils/Enums.js | 3 +-
dashboardv2/public/js/utils/UrlLinks.js | 6 ++
.../public/js/views/search/QueryBuilderView.js | 33 +++++++--
.../public/js/views/search/SearchLayoutView.js | 52 ++++++++++----
.../public/js/views/search/SearchQueryView.js | 12 +++-
.../js/views/search/SearchResultLayoutView.js | 24 +++++--
.../js/views/tag/TagAttributeDetailLayoutView.js | 10 ++-
dashboardv3/public/js/main.js | 27 +++++++-
dashboardv3/public/js/utils/CommonViewFunction.js | 69 ++++++++++++++++---
dashboardv3/public/js/utils/Enums.js | 3 +-
dashboardv3/public/js/utils/UrlLinks.js | 6 ++
.../public/js/views/search/QueryBuilderView.js | 34 ++++++++--
.../js/views/search/SearchDefaultLayoutView.js | 12 +++-
.../views/search/SearchFilterBrowseLayoutView.js | 39 ++++++-----
.../public/js/views/search/SearchQueryView.js | 11 ++-
.../js/views/search/SearchResultLayoutView.js | 24 +++++--
.../search/tree/ClassificationTreeLayoutView.js | 34 +++++++++-
.../js/views/search/tree/EntityTreeLayoutView.js | 45 ++++++++++--
.../js/views/tag/TagAttributeDetailLayoutView.js | 10 ++-
21 files changed, 455 insertions(+), 105 deletions(-)
diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js
index 7b33da7..6ba1e12 100644
--- a/dashboardv2/public/js/main.js
+++ b/dashboardv2/public/js/main.js
@@ -195,13 +195,14 @@ require(['App',
'utils/UrlLinks',
'collection/VEntityList',
'collection/VTagList',
+ 'utils/Enums',
'utils/Overrides',
'bootstrap',
'd3',
'select2'
-], function(App, Router, Helper, CommonViewFunction, Globals, UrlLinks, VEntityList, VTagList) {
+], function(App, Router, Helper, CommonViewFunction, Globals, UrlLinks, VEntityList, VTagList, Enums) {
var that = this;
- this.asyncFetchCounter = 6;
+ this.asyncFetchCounter = 6 + (Enums.addOnEntities.length + 1);
this.entityDefCollection = new VEntityList();
this.entityDefCollection.url = UrlLinks.entitiesDefApiUrl();
this.typeHeaders = new VTagList();
@@ -308,4 +309,24 @@ require(['App',
startApp();
}
});
-});
\ No newline at end of file
+
+ Enums.addOnEntities.forEach(function(addOnEntity) {
+ CommonViewFunction.fetchRootEntityAttributes({
+ url: UrlLinks.rootEntityDefUrl(addOnEntity),
+ entity: addOnEntity,
+ callback: function() {
+ --that.asyncFetchCounter;
+ startApp();
+ }
+ });
+ });
+
+ CommonViewFunction.fetchRootClassificationAttributes({
+ url: UrlLinks.rootClassificationDefUrl(Enums.addOnClassification[0]),
+ classification: Enums.addOnClassification[0],
+ callback: function() {
+ --that.asyncFetchCounter;
+ startApp();
+ }
+ });
+});
diff --git a/dashboardv2/public/js/utils/CommonViewFunction.js b/dashboardv2/public/js/utils/CommonViewFunction.js
index 6ff40bb..a151fa1 100644
--- a/dashboardv2/public/js/utils/CommonViewFunction.js
+++ b/dashboardv2/public/js/utils/CommonViewFunction.js
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enums', 'moment'], function(require, Utils, Modal, Messages, Enums, moment) {
+define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enums', 'moment', 'utils/Globals'], function(require, Utils, Modal, Messages, Enums, moment, Globals) {
'use strict';
var CommonViewFunction = {};
@@ -362,6 +362,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
return '<div class="tagList btn-inline btn-fixed-width">' + termHtml + addTerm + '</div>';
}
CommonViewFunction.generateQueryOfFilter = function(value) {
+ value = Utils.getUrlState.getQueryParams();
var entityFilters = CommonViewFunction.attributeFilter.extractUrl({ "value": value.entityFilters, "formatDate": true }),
tagFilters = CommonViewFunction.attributeFilter.extractUrl({ "value": value.tagFilters, "formatDate": true }),
queryArray = [];
@@ -456,22 +457,32 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
val = val.join(',');
} else if (k == "tagFilters") {
if (classificationDefCollection) {
- var classificationDef = classificationDefCollection.fullCollection.findWhere({ 'name': value[skey].classification })
- attributeDefs = Utils.getNestedSuperTypeObj({
- collection: classificationDefCollection,
- attrMerge: true,
- data: classificationDef.toJSON()
- });
+ var classificationDef = classificationDefCollection.fullCollection.findWhere({ 'name': value[skey].classification }), attributeDefs = [];
+ if (classificationDef) {
+ Utils.getNestedSuperTypeObj({
+ collection: classificationDefCollection,
+ attrMerge: true,
+ data: classificationDef.toJSON()
+ });
+ }
+ if (Globals[value[skey].typeName]) {
+ attributeDefs = Globals[value[skey].typeName].attributeDefs;
+ }
}
val = CommonViewFunction.attributeFilter.generateUrl({ "value": val, "attributeDefs": attributeDefs });
} else if (k == "entityFilters") {
if (entityDefCollection) {
- var entityDef = entityDefCollection.fullCollection.findWhere({ 'name': value[skey].typeName }),
- attributeDefs = Utils.getNestedSuperTypeObj({
- collection: entityDefCollection,
- attrMerge: true,
- data: entityDef.toJSON()
- });
+ var entityDef = entityDefCollection.fullCollection.findWhere({ 'name': value[skey].typeName }), attributeDefs = [];
+ if (entityDef) {
+ Utils.getNestedSuperTypeObj({
+ collection: entityDefCollection,
+ attrMerge: true,
+ data: entityDef.toJSON()
+ });
+ }
+ if (Globals[value[skey].typeName]) {
+ attributeDefs = Globals[value[skey].typeName].attributeDefs;
+ }
}
val = CommonViewFunction.attributeFilter.generateUrl({ "value": val, "attributeDefs": attributeDefs });
} else if (_.contains(["includeDE", "excludeST", "excludeSC"], k)) {
@@ -940,5 +951,45 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
});
return list.join(',');
}
+ CommonViewFunction.fetchRootEntityAttributes = function (options) {
+ $.ajax({
+ url: options.url,
+ methods: 'GET',
+ dataType: 'json',
+ delay: 250,
+ cache: true,
+ success: function(response) {
+ if (response) {
+ var entity = Object.assign(response, { name: options.entity });
+ Globals[options.entity] = entity;
+ }
+ },
+ complete: function(response) {
+ if (options.callback) {
+ options.callback(response);
+ }
+ }
+ });
+ },
+ CommonViewFunction.fetchRootClassificationAttributes = function (options) {
+ $.ajax({
+ url: options.url,
+ methods: 'GET',
+ dataType: 'json',
+ delay: 250,
+ cache: true,
+ success: function(response) {
+ if (response) {
+ var classification = Object.assign(response, { name: options.classification });
+ Globals[options.classification] = classification;
+ }
+ },
+ complete: function(response) {
+ if (options.callback) {
+ options.callback(response);
+ }
+ }
+ });
+ }
return CommonViewFunction;
-});
\ No newline at end of file
+});
diff --git a/dashboardv2/public/js/utils/Enums.js b/dashboardv2/public/js/utils/Enums.js
index 58542ec..a7de0d4 100644
--- a/dashboardv2/public/js/utils/Enums.js
+++ b/dashboardv2/public/js/utils/Enums.js
@@ -136,7 +136,8 @@ define(['require'], function(require) {
validValues: getTermRelationAttributes(),
validValuesFor: getTermRelationAttributes()
}
- Enums.addOnClassification = ["_CLASSIFIED", "_NOT_CLASSIFIED"];
+ Enums.addOnClassification = ["_ALL_CLASSIFICATION_TYPES", "_CLASSIFIED", "_NOT_CLASSIFIED"];
+ Enums.addOnEntities = ["_ALL_ENTITY_TYPES"];
Enums.stats = {
generalData: {
diff --git a/dashboardv2/public/js/utils/UrlLinks.js b/dashboardv2/public/js/utils/UrlLinks.js
index dbb1a0a..4e98c41 100644
--- a/dashboardv2/public/js/utils/UrlLinks.js
+++ b/dashboardv2/public/js/utils/UrlLinks.js
@@ -43,6 +43,12 @@ define(['require', 'utils/Enums', 'utils/Utils', 'underscore'], function(require
metricsApiUrl: function(){
return this.baseUrl + '/admin/metrics'
},
+ rootEntityDefUrl: function(name) {
+ return this.baseUrlV2 + '/types/entitydef/name/' + name;
+ },
+ rootClassificationDefUrl: function(name) {
+ return this.baseUrlV2 + '/types/classificationdef/name/' + name;
+ },
getDefApiUrl: function(type, name) {
var defApiUrl = this.typedefsUrl(), defUrl;
if (name) {
diff --git a/dashboardv2/public/js/views/search/QueryBuilderView.js b/dashboardv2/public/js/views/search/QueryBuilderView.js
index 39de948..fdbc7e7 100644
--- a/dashboardv2/public/js/views/search/QueryBuilderView.js
+++ b/dashboardv2/public/js/views/search/QueryBuilderView.js
@@ -53,8 +53,9 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'attrObj', 'value', 'typeHeaders', 'entityDefCollection', 'enumDefCollection', 'tag', 'searchTableFilters'));
+ _.extend(this, _.pick(options, 'attrObj', 'value', 'typeHeaders', 'entityDefCollection', 'enumDefCollection', 'tag', 'searchTableFilters', 'systemAttrArr'));
this.attrObj = _.sortBy(this.attrObj, 'name');
+ this.systemAttrArr = _.sortBy(this.systemAttrArr, 'name');
this.filterType = this.tag ? 'tagFilters' : 'entityFilters';
},
bindEvents: function() {},
@@ -82,12 +83,15 @@ define(['require',
}
return false;
},
- getObjDef: function(attrObj, rules) {
+ getObjDef: function(attrObj, rules, isGroup, groupType) {
var obj = {
id: attrObj.name,
label: _.escape(attrObj.name.capitalize() + " (" + attrObj.typeName + ")"),
type: _.escape(attrObj.typeName)
};
+ if (isGroup) {
+ obj.optgroup = groupType;
+ }
if (obj.type === "date") {
obj['plugin'] = 'daterangepicker';
obj['plugin_config'] = {
@@ -141,12 +145,29 @@ define(['require',
},
onRender: function() {
var that = this,
- filters = [];
+ filters = [],
+ isGroupView = false,
+ placeHolder = '--Select Attribute--';
+ if (this.attrObj.length > 0 && this.systemAttrArr.length > 0) {
+ isGroupView = true;
+ } else if (this.attrObj.length === 0 || this.systemAttrArr.length === 0) {
+ isGroupView = false;
+ }
+ if (this.attrObj.length === 0) {
+ placeHolder = '--Select System Attribute--';
+ }
if (this.value) {
var rules_widgets = CommonViewFunction.attributeFilter.extractUrl({ "value": this.searchTableFilters[this.filterType][(this.tag ? this.value.tag : this.value.type)], "formatDate": true });
}
_.each(this.attrObj, function(obj) {
- var returnObj = that.getObjDef(obj, rules_widgets);
+ var type = that.tag ? 'Classification' : 'Entity';
+ var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, 'Select ' + type + ' Attribute');
+ if (returnObj) {
+ filters.push(returnObj);
+ }
+ });
+ _.each(this.systemAttrArr, function(obj) {
+ var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, 'Select System Attribute');
if (returnObj) {
filters.push(returnObj);
}
@@ -156,7 +177,7 @@ define(['require',
this.ui.builder.queryBuilder({
plugins: ['bt-tooltip-errors'],
filters: filters,
- select_placeholder: '--Select Attribute--',
+ select_placeholder: placeHolder,
allow_empty: true,
conditions: ['AND', 'OR'],
allow_groups: true,
@@ -195,4 +216,4 @@ define(['require',
}
});
return QueryBuilderView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js b/dashboardv2/public/js/views/search/SearchLayoutView.js
index 51134b5..0706b88 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -124,6 +124,11 @@ define(['require',
this.type = param.searchType;
this.updateQueryObject(param);
}
+ if ((this.value && this.value.type) || (this.value && this.value.tag && this.value.searchType === "basic")) {
+ this.setInitialEntityVal = false;
+ } else {
+ this.setInitialEntityVal = true;
+ }
this.bindEvents();
},
renderSaveSearch: function() {
@@ -206,6 +211,9 @@ define(['require',
this.setValues();
this.checkForButtonVisiblity();
this.renderSaveSearch();
+ if (this.setInitialEntityVal) {
+ this.setInitialEntityVal = false;
+ }
},
makeFilterButtonActive: function(filtertypeParam) {
var filtertype = ['entityFilters', 'tagFilters'],
@@ -231,7 +239,8 @@ define(['require',
}
}
var tagCheck = function(filterObj, type) {
- if (that.value.tag && !_.contains(Enums.addOnClassification, that.value.tag)) {
+ var filterAddOn = Enums.addOnClassification.filter(function(a) { a !== Enums.addOnClassification[0]});
+ if (that.value.tag && !_.contains(filterAddOn, that.value.tag)) {
that.ui.tagAttrFilter.prop('disabled', false);
if (filterObj && filterObj.length) {
that.ui.tagAttrFilter.addClass('active');
@@ -461,8 +470,11 @@ define(['require',
}
},
manualRender: function(paramObj) {
+ if (paramObj) {
+ this.value = paramObj;
+ }
this.updateQueryObject(paramObj);
- this.renderTypeTagList(paramObj);
+ this.renderTypeTagList();
this.setValues(paramObj);
},
getFilterBox: function() {
@@ -488,11 +500,7 @@ define(['require',
this.ui.typeLov.empty();
var typeStr = '<option></option>',
tagStr = typeStr,
- foundNewClassification = false,
- optionsValue = this.options.value;
- if (options && options.tag) {
- optionsValue = options;
- }
+ foundNewClassification = false;
this.typeHeaders.fullCollection.each(function(model) {
var name = Utils.getName(model.toJSON(), 'name');
if (model.get('category') == 'ENTITY' && (serviceTypeToBefiltered && serviceTypeToBefiltered.length ? _.contains(serviceTypeToBefiltered, model.get('serviceType')) : true)) {
@@ -501,8 +509,8 @@ define(['require',
}
if (isTypeOnly == undefined && model.get('category') == 'CLASSIFICATION') {
var tagEntityCount = that.entityCountObj.tag.tagEntities[name];
- if (optionsValue) { // to check if wildcard classification is present in our data
- if (name === optionsValue.tag) {
+ if (that.value && that.value.tag) { // to check if wildcard classification is present in our data
+ if (name === that.value.tag) {
foundNewClassification = true;
}
}
@@ -510,17 +518,26 @@ define(['require',
}
});
- if (!foundNewClassification && optionsValue) {
- if (optionsValue.tag) {
- var classificationValue = decodeURIComponent(optionsValue.tag);
+ if (this.type !== "dsl") {
+ _.each(Enums.addOnEntities, function(entity) {
+ typeStr += '<option value="' + (entity) + '" data-name="' + (entity) + '">' + entity + '</option>';
+ });
+ }
+ if (!foundNewClassification && that.value) {
+ if (that.value.tag) {
+ var classificationValue = decodeURIComponent(that.value.tag);
tagStr += '<option value="' + (classificationValue) + '" data-name="' + (classificationValue) + '">' + classificationValue + '</option>';
}
}
if (_.isUndefined(isTypeOnly)) {
//to insert extra classification list
- _.each(Enums.addOnClassification, function(classificationName) {
- tagStr += '<option value="' + (classificationName) + '" data-name="' + (classificationName) + '">' + classificationName + '</option>';
- });
+ if (that.value) {
+ _.each(Enums.addOnClassification, function(classificationName) {
+ if (classificationName !== that.value.tag) {
+ tagStr += '<option value="' + (classificationName) + '" data-name="' + (classificationName) + '">' + classificationName + '</option>';
+ }
+ });
+ }
that.ui.tagLov.html(tagStr);
this.ui.tagLov.select2({
placeholder: "Select Classification",
@@ -554,6 +571,11 @@ define(['require',
if (typeLovSelect2 && serviceTypeToBefiltered) {
typeLovSelect2.select2('open').trigger("change", { 'manual': true });
}
+ if (that.setInitialEntityVal) {
+ var defaultEntity = Enums.addOnEntities[0];
+ that.value.type = defaultEntity;
+ that.ui.typeLov.val(defaultEntity, null);
+ }
},
renderTermList: function() {
var getTypeAheadData = function(data, params) {
diff --git a/dashboardv2/public/js/views/search/SearchQueryView.js b/dashboardv2/public/js/views/search/SearchQueryView.js
index 61a4311..95d3794 100644
--- a/dashboardv2/public/js/views/search/SearchQueryView.js
+++ b/dashboardv2/public/js/views/search/SearchQueryView.js
@@ -21,7 +21,9 @@ define(['require',
'modules/Modal',
'utils/Utils',
'hbs!tmpl/search/SearchQuery_tmpl',
-], function(require, Backbone, Modal, Utils, SearchQuery_Tmpl) {
+ 'utils/Globals',
+ 'utils/Enums'
+], function(require, Backbone, Modal, Utils, SearchQuery_Tmpl, Globals, Enums) {
var SearchQueryView = Backbone.Marionette.LayoutView.extend(
/** @lends SearchQueryView */
@@ -100,6 +102,9 @@ define(['require',
attrMerge: true,
});
}
+ if (Globals[this.value.tag] || Globals[Enums.addOnClassification[0]]) {
+ obj['systemAttrArr'] = (Globals[this.value.tag] || Globals[Enums.addOnClassification[0]]).attributeDefs;
+ }
} else {
obj['type'] = true;
obj['attrObj'] = this.entityDefCollection.fullCollection.find({ name: this.value.type });
@@ -110,6 +115,9 @@ define(['require',
attrMerge: true
});
}
+ if (Globals[this.value.type] ||Globals[Enums.addOnEntities[0]]) {
+ obj['systemAttrArr'] = (Globals[this.value.type] || Globals[Enums.addOnEntities[0]]).attributeDefs;
+ }
}
this.renderQueryBuilder(obj);
// this.showHideFilter(this.value);
@@ -123,4 +131,4 @@ define(['require',
}
});
return SearchQueryView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index bbff888..18b744c 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -573,6 +573,9 @@ define(['require',
if (!that.REntityTableLayoutView) {
return;
}
+ if (!that.value) {
+ that.value = that.options.value;
+ }
that.REntityTableLayoutView.show(table);
if (that.value.searchType !== "dsl") {
that.ui.containerCheckBox.show();
@@ -637,6 +640,7 @@ define(['require',
nameCheck = 0,
columnToShow = null,
col = {};
+ this.value = Utils.getUrlState.getQueryParams();
if (this.value && this.value.searchType === "basic" && this.searchTableColumns && (this.searchTableColumns[this.value.type] !== undefined)) {
columnToShow = this.searchTableColumns[this.value.type] == null ? [] : this.searchTableColumns[this.value.type];
}
@@ -786,9 +790,21 @@ define(['require',
}
if (this.value && this.value.searchType === "basic") {
- var def = this.entityDefCollection.fullCollection.find({ name: this.value.type });
- if (def) {
- var attrObj = Utils.getNestedSuperTypeObj({ data: def.toJSON(), collection: this.entityDefCollection, attrMerge: true });
+ var def = this.entityDefCollection.fullCollection.find({ name: this.value.type }), systemAttr = [];
+ if (def || Globals[this.value.type] || (
+ this.value.tag
+ ? Globals[this.value.tag]
+ ? Globals[this.value.tag]
+ : Globals[Enums.addOnClassification[0]]
+ : undefined)) {
+ var attrObj = def ? Utils.getNestedSuperTypeObj({ data: def.toJSON(), collection: this.entityDefCollection, attrMerge: true }) : [];
+ if (this.value.type && ( Globals[this.value.type] || Globals[Enums.addOnEntities[0]])) {
+ systemAttr = (Globals[this.value.type] || Globals[Enums.addOnEntities[0]]).attributeDefs;
+ }
+ if (this.value.tag && ( Globals[this.value.tag] || Globals[Enums.addOnClassification[0]])) {
+ systemAttr = (Globals[this.value.tag] || Globals[Enums.addOnClassification[0]]).attributeDefs;
+ }
+ attrObj = attrObj.concat(systemAttr);
_.each(attrObj, function(obj, key) {
var key = obj.name,
isRenderable = _.contains(columnToShow, key),
@@ -1202,4 +1218,4 @@ define(['require',
}
});
return SearchResultLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
index 8018141..2c4f654 100644
--- a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
@@ -24,8 +24,9 @@ define(['require',
'collection/VTagList',
'models/VTag',
'utils/Messages',
- 'utils/UrlLinks'
-], function(require, Backbone, TagAttributeDetailLayoutViewTmpl, Utils, AddTagAttributeView, VTagList, VTag, Messages, UrlLinks) {
+ 'utils/UrlLinks',
+ 'utils/Globals'
+], function(require, Backbone, TagAttributeDetailLayoutViewTmpl, Utils, AddTagAttributeView, VTagList, VTag, Messages, UrlLinks, Globals) {
'use strict';
var TagAttributeDetailLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -92,6 +93,9 @@ define(['require',
onRender: function() {
Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.tagDetail'));
if (this.collection.models.length && !this.model) {
+ if (Globals[this.tag]) {
+ this.collection.fullCollection.push(Globals[this.tag]);
+ }
this.model = this.collection.fullCollection.findWhere({ name: this.tag });
this.renderTagDetail();
}
@@ -312,4 +316,4 @@ define(['require',
}
});
return TagAttributeDetailLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/main.js b/dashboardv3/public/js/main.js
index bef212d..ffdcfdd 100644
--- a/dashboardv3/public/js/main.js
+++ b/dashboardv3/public/js/main.js
@@ -195,13 +195,14 @@ require(['App',
'utils/UrlLinks',
'collection/VEntityList',
'collection/VTagList',
+ 'utils/Enums',
'utils/Overrides',
'bootstrap',
'd3',
'select2'
-], function(App, Router, Helper, CommonViewFunction, Globals, UrlLinks, VEntityList, VTagList) {
+], function(App, Router, Helper, CommonViewFunction, Globals, UrlLinks, VEntityList, VTagList, Enums) {
var that = this;
- this.asyncFetchCounter = 6;
+ this.asyncFetchCounter = 6 + (Enums.addOnEntities.length + 1);
this.entityDefCollection = new VEntityList();
this.entityDefCollection.url = UrlLinks.entitiesDefApiUrl();
this.typeHeaders = new VTagList();
@@ -308,4 +309,24 @@ require(['App',
startApp();
}
});
-});
\ No newline at end of file
+
+ Enums.addOnEntities.forEach(function(addOnEntity) {
+ CommonViewFunction.fetchRootEntityAttributes({
+ url: UrlLinks.rootEntityDefUrl(addOnEntity),
+ entity: addOnEntity,
+ callback: function() {
+ --that.asyncFetchCounter;
+ startApp();
+ }
+ });
+ });
+
+ CommonViewFunction.fetchRootClassificationAttributes({
+ url: UrlLinks.rootClassificationDefUrl(Enums.addOnClassification[0]),
+ classification: Enums.addOnClassification[0],
+ callback: function() {
+ --that.asyncFetchCounter;
+ startApp();
+ }
+ });
+});
diff --git a/dashboardv3/public/js/utils/CommonViewFunction.js b/dashboardv3/public/js/utils/CommonViewFunction.js
index aa9c526..b2b96ab 100644
--- a/dashboardv3/public/js/utils/CommonViewFunction.js
+++ b/dashboardv3/public/js/utils/CommonViewFunction.js
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enums', 'moment'], function(require, Utils, Modal, Messages, Enums, moment) {
+define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enums', 'moment', 'utils/Globals'], function(require, Utils, Modal, Messages, Enums, moment, Globals) {
'use strict';
var CommonViewFunction = {};
@@ -362,6 +362,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
return '<div class="tagList btn-inline btn-fixed-width">' + termHtml + addTerm + '</div>';
}
CommonViewFunction.generateQueryOfFilter = function(value, isCapsuleView) {
+ value = Utils.getUrlState.getQueryParams();
var entityFilters = CommonViewFunction.attributeFilter.extractUrl({ "value": value.entityFilters, "formatDate": true }),
tagFilters = CommonViewFunction.attributeFilter.extractUrl({ "value": value.tagFilters, "formatDate": true }),
queryArray = [];
@@ -476,22 +477,32 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
val = val.join(',');
} else if (k == "tagFilters") {
if (classificationDefCollection) {
- var classificationDef = classificationDefCollection.fullCollection.findWhere({ 'name': value[skey].classification })
- attributeDefs = Utils.getNestedSuperTypeObj({
- collection: classificationDefCollection,
- attrMerge: true,
- data: classificationDef.toJSON()
- });
+ var classificationDef = classificationDefCollection.fullCollection.findWhere({ 'name': value[skey].classification }), attributeDefs = []
+ if (classificationDef) {
+ Utils.getNestedSuperTypeObj({
+ collection: classificationDefCollection,
+ attrMerge: true,
+ data: classificationDef.toJSON()
+ });
+ }
+ if (Globals[value[skey].typeName]) {
+ attributeDefs = Globals[value[skey].typeName].attributeDefs;
+ }
}
val = CommonViewFunction.attributeFilter.generateUrl({ "value": val, "attributeDefs": attributeDefs });
} else if (k == "entityFilters") {
if (entityDefCollection) {
- var entityDef = entityDefCollection.fullCollection.findWhere({ 'name': value[skey].typeName }),
+ var entityDef = entityDefCollection.fullCollection.findWhere({ 'name': value[skey].typeName }), attributeDefs = [];
+ if (entityDef) {
attributeDefs = Utils.getNestedSuperTypeObj({
collection: entityDefCollection,
attrMerge: true,
data: entityDef.toJSON()
});
+ }
+ if (Globals[value[skey].typeName]) {
+ attributeDefs = Globals[value[skey].typeName].attributeDefs;
+ }
}
val = CommonViewFunction.attributeFilter.generateUrl({ "value": val, "attributeDefs": attributeDefs });
} else if (_.contains(["includeDE", "excludeST", "excludeSC"], k)) {
@@ -960,5 +971,45 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
});
return list.join(',');
}
+ CommonViewFunction.fetchRootEntityAttributes = function (options) {
+ $.ajax({
+ url: options.url,
+ methods: 'GET',
+ dataType: 'json',
+ delay: 250,
+ cache: true,
+ success: function(response) {
+ if (response) {
+ var entity = Object.assign(response, { name: options.entity , guid: options.entity });
+ Globals[options.entity] = entity;
+ }
+ },
+ complete: function(response) {
+ if (options.callback) {
+ options.callback(response);
+ }
+ }
+ });
+ },
+ CommonViewFunction.fetchRootClassificationAttributes = function (options) {
+ $.ajax({
+ url: options.url,
+ methods: 'GET',
+ dataType: 'json',
+ delay: 250,
+ cache: true,
+ success: function(response) {
+ if (response) {
+ var classification = Object.assign(response, { name: options.classification, guid: options.classification });
+ Globals[options.classification] = classification;
+ }
+ },
+ complete: function(response) {
+ if (options.callback) {
+ options.callback(response);
+ }
+ }
+ });
+ }
return CommonViewFunction;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/utils/Enums.js b/dashboardv3/public/js/utils/Enums.js
index 58542ec..a7de0d4 100644
--- a/dashboardv3/public/js/utils/Enums.js
+++ b/dashboardv3/public/js/utils/Enums.js
@@ -136,7 +136,8 @@ define(['require'], function(require) {
validValues: getTermRelationAttributes(),
validValuesFor: getTermRelationAttributes()
}
- Enums.addOnClassification = ["_CLASSIFIED", "_NOT_CLASSIFIED"];
+ Enums.addOnClassification = ["_ALL_CLASSIFICATION_TYPES", "_CLASSIFIED", "_NOT_CLASSIFIED"];
+ Enums.addOnEntities = ["_ALL_ENTITY_TYPES"];
Enums.stats = {
generalData: {
diff --git a/dashboardv3/public/js/utils/UrlLinks.js b/dashboardv3/public/js/utils/UrlLinks.js
index c58c58f..6eca3b6 100644
--- a/dashboardv3/public/js/utils/UrlLinks.js
+++ b/dashboardv3/public/js/utils/UrlLinks.js
@@ -43,6 +43,12 @@ define(['require', 'utils/Enums', 'utils/Utils', 'underscore'], function(require
metricsApiUrl: function() {
return this.baseUrl + '/admin/metrics'
},
+ rootEntityDefUrl: function(name) {
+ return this.baseUrlV2 + '/types/entitydef/name/' + name;
+ },
+ rootClassificationDefUrl: function(name) {
+ return this.baseUrlV2 + '/types/classificationdef/name/' + name;
+ },
getDefApiUrl: function(type, name) {
var defApiUrl = this.typedefsUrl(),
defUrl;
diff --git a/dashboardv3/public/js/views/search/QueryBuilderView.js b/dashboardv3/public/js/views/search/QueryBuilderView.js
index 39de948..15a3ac0 100644
--- a/dashboardv3/public/js/views/search/QueryBuilderView.js
+++ b/dashboardv3/public/js/views/search/QueryBuilderView.js
@@ -53,8 +53,9 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'attrObj', 'value', 'typeHeaders', 'entityDefCollection', 'enumDefCollection', 'tag', 'searchTableFilters'));
+ _.extend(this, _.pick(options, 'attrObj', 'value', 'typeHeaders', 'entityDefCollection', 'enumDefCollection', 'tag', 'searchTableFilters', 'systemAttrArr'));
this.attrObj = _.sortBy(this.attrObj, 'name');
+ this.systemAttrArr = _.sortBy(this.systemAttrArr, 'name');
this.filterType = this.tag ? 'tagFilters' : 'entityFilters';
},
bindEvents: function() {},
@@ -82,12 +83,15 @@ define(['require',
}
return false;
},
- getObjDef: function(attrObj, rules) {
+ getObjDef: function(attrObj, rules, isGroup, groupType) {
var obj = {
id: attrObj.name,
label: _.escape(attrObj.name.capitalize() + " (" + attrObj.typeName + ")"),
type: _.escape(attrObj.typeName)
};
+ if (isGroup) {
+ obj.optgroup = groupType;
+ }
if (obj.type === "date") {
obj['plugin'] = 'daterangepicker';
obj['plugin_config'] = {
@@ -141,12 +145,28 @@ define(['require',
},
onRender: function() {
var that = this,
- filters = [];
- if (this.value) {
+ filters = [],
+ isGroupView = false,
+ placeHolder = '--Select Attribute--';
+ if (this.attrObj.length > 0 && this.systemAttrArr.length > 0) {
+ isGroupView = true;
+ } else if (this.attrObj.length === 0 || this.systemAttrArr.length === 0) {
+ isGroupView = false;
+ }
+ if (this.attrObj.length === 0) {
+ placeHolder = '--Select System Attribute--';
+ } if (this.value) {
var rules_widgets = CommonViewFunction.attributeFilter.extractUrl({ "value": this.searchTableFilters[this.filterType][(this.tag ? this.value.tag : this.value.type)], "formatDate": true });
}
_.each(this.attrObj, function(obj) {
- var returnObj = that.getObjDef(obj, rules_widgets);
+ var type = that.tag ? 'Classification' : 'Entity';
+ var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, 'Select '+ type + ' Attribute');
+ if (returnObj) {
+ filters.push(returnObj);
+ }
+ });
+ _.each(this.systemAttrArr, function(obj) {
+ var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, 'Select System Attribute');
if (returnObj) {
filters.push(returnObj);
}
@@ -156,7 +176,7 @@ define(['require',
this.ui.builder.queryBuilder({
plugins: ['bt-tooltip-errors'],
filters: filters,
- select_placeholder: '--Select Attribute--',
+ select_placeholder: placeHolder,
allow_empty: true,
conditions: ['AND', 'OR'],
allow_groups: true,
@@ -195,4 +215,4 @@ define(['require',
}
});
return QueryBuilderView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js b/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js
index aa1f777..3946cff 100644
--- a/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLayoutView_tmpl", 'utils/Utils', 'utils/CommonViewFunction'], function(require, Backbone, Globals, SearchDefaultLayoutViewTmpl, Utils, CommonViewFunction) {
+define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLayoutView_tmpl", 'utils/Utils', 'utils/CommonViewFunction', 'utils/Enums'], function(require, Backbone, Globals, SearchDefaultLayoutViewTmpl, Utils, CommonViewFunction, Enums) {
"use strict";
var SearchDefaultlLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -252,6 +252,10 @@ define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLa
});
this.tagAttributeLength = attrTagObj.length;
}
+ if (Globals[that.options.value.tag] || Globals[Enums.addOnClassification[0]]) {
+ obj.systemAttrArr = (Globals[that.options.value.tag] || Globals[Enums.addOnClassification[0]]).attributeDefs;
+ this.tagAttributeLength = obj.systemAttrArr.length;
+ }
this.renderQueryBuilder(_.extend({}, obj, {
tag: true,
type: false,
@@ -270,6 +274,10 @@ define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLa
});
this.entityAttributeLength = attrTypeObj.length;
}
+ if (Globals[that.options.value.type] || Globals[Enums.addOnEntities[0]]) {
+ obj.systemAttrArr = (Globals[that.options.value.type] || Globals[Enums.addOnEntities[0]]).attributeDefs;
+ this.entityAttributeLength = obj.systemAttrArr.length;
+ }
this.renderQueryBuilder(_.extend({}, obj, {
tag: false,
type: true,
@@ -430,4 +438,4 @@ define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLa
}
);
return SearchDefaultlLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js b/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js
index 4bc741c..473aa7a 100644
--- a/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js
@@ -36,14 +36,13 @@ define([
RClassificationTreeRender: '[data-id="r_classificationTreeRender"]',
REntityTreeRender: '[data-id="r_entityTreeRender"]',
RCustomFilterTreeRender: '[data-id="r_customFilterTreeRender"]',
-
},
ui: {
//search
searchNode: '[data-id="searchNode"]',
sliderBar: '[data-id="sliderBar"]',
- menuItems: '.menu-items'
+ menuItems: ".menu-items"
},
templateHelpers: function() {
return {
@@ -95,7 +94,7 @@ define([
events["click " + this.ui.menuItems] = function(e) {
e.stopPropagation();
//this.$('.menu-items').removeClass('open');
- }
+ };
return events;
},
bindEvents: function() {},
@@ -119,26 +118,30 @@ define([
this.bindEvents();
},
onRender: function() {
- this.renderEntityTree();
- this.renderClassificationTree();
- this.renderGlossaryTree();
+ var opt = opt = Utils.getUrlState.getQueryParams();
+ this.renderEntityTree(opt);
+ this.renderClassificationTree(opt);
+ this.renderGlossaryTree(opt);
this.renderCustomFilterTree();
this.showHideGlobalFilter();
this.showDefaultPage();
},
-
showDefaultPage: function() {
if (this.options.value) {
- if (!this.options.value.type && !this.options.value.tag && !this.options.value.term && !this.options.value.gType) {
+ if (
+ !this.options.value.type &&
+ !this.options.value.tag &&
+ !this.options.value.term &&
+ !this.options.value.gType
+ ) {
Utils.setUrl({
- url: '!/search',
+ url: "!/search",
mergeBrowserUrl: false,
trigger: true,
updateTabState: true
});
}
}
-
},
onShow: function() {
var that = this;
@@ -206,30 +209,30 @@ define([
}
}
},
- renderEntityTree: function() {
+ renderEntityTree: function(opt) {
var that = this;
require(["views/search/tree/EntityTreeLayoutView"], function(ClassificationTreeLayoutView) {
- that.REntityTreeRender.show(new ClassificationTreeLayoutView(_.extend({ query: that.query }, that.options)))
+ that.REntityTreeRender.show(new ClassificationTreeLayoutView(_.extend({ query: that.query }, that.options, {value: opt})));
});
},
- renderClassificationTree: function() {
+ renderClassificationTree: function(opt) {
var that = this;
require(["views/search/tree/ClassificationTreeLayoutView"], function(ClassificationTreeLayoutView) {
- that.RClassificationTreeRender.show(new ClassificationTreeLayoutView(_.extend({ query: that.query }, that.options)))
+ that.RClassificationTreeRender.show(new ClassificationTreeLayoutView(_.extend({ query: that.query }, that.options, {value: opt})));
});
},
- renderGlossaryTree: function() {
+ renderGlossaryTree: function(opt) {
var that = this;
require(["views/search/tree/GlossaryTreeLayoutView"], function(GlossaryTreeLayoutView) {
- that.RGlossaryTreeRender.show(new GlossaryTreeLayoutView(_.extend({ query: that.query }, that.options)))
+ that.RGlossaryTreeRender.show(new GlossaryTreeLayoutView(_.extend({ query: that.query }, that.options, {value: opt})));
});
},
renderCustomFilterTree: function() {
var that = this;
require(["views/search/tree/CustomFilterTreeLayoutView"], function(CustomFilterTreeLayoutView) {
- that.RCustomFilterTreeRender.show(new CustomFilterTreeLayoutView(_.extend({ query: that.query }, that.options)))
+ that.RCustomFilterTreeRender.show(new CustomFilterTreeLayoutView(_.extend({ query: that.query }, that.options)));
});
}
});
return SearchFilterBrowseLayoutViewNew;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/search/SearchQueryView.js b/dashboardv3/public/js/views/search/SearchQueryView.js
index 61a4311..b761477 100644
--- a/dashboardv3/public/js/views/search/SearchQueryView.js
+++ b/dashboardv3/public/js/views/search/SearchQueryView.js
@@ -21,7 +21,8 @@ define(['require',
'modules/Modal',
'utils/Utils',
'hbs!tmpl/search/SearchQuery_tmpl',
-], function(require, Backbone, Modal, Utils, SearchQuery_Tmpl) {
+ 'utils/Globals'
+], function(require, Backbone, Modal, Utils, SearchQuery_Tmpl, Globals) {
var SearchQueryView = Backbone.Marionette.LayoutView.extend(
/** @lends SearchQueryView */
@@ -100,6 +101,9 @@ define(['require',
attrMerge: true,
});
}
+ if (Globals[this.value.tag]) {
+ obj['attrObj'] = Globals[this.value.tag].attributeDefs;
+ }
} else {
obj['type'] = true;
obj['attrObj'] = this.entityDefCollection.fullCollection.find({ name: this.value.type });
@@ -110,6 +114,9 @@ define(['require',
attrMerge: true
});
}
+ if (Globals[this.value.type]) {
+ obj['attrObj'] = Globals[this.value.type].attributeDefs;
+ }
}
this.renderQueryBuilder(obj);
// this.showHideFilter(this.value);
@@ -123,4 +130,4 @@ define(['require',
}
});
return SearchQueryView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/search/SearchResultLayoutView.js b/dashboardv3/public/js/views/search/SearchResultLayoutView.js
index 8abeafe..4c985bc 100644
--- a/dashboardv3/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchResultLayoutView.js
@@ -584,6 +584,9 @@ define(['require',
if (!that.REntityTableLayoutView) {
return;
}
+ if (!that.value) {
+ that.value = that.options.value;
+ }
that.REntityTableLayoutView.show(table);
if (that.value.searchType !== "dsl") {
that.ui.containerCheckBox.show();
@@ -648,6 +651,7 @@ define(['require',
nameCheck = 0,
columnToShow = null,
col = {};
+ this.value = Utils.getUrlState.getQueryParams();
if (this.value && this.value.searchType === "basic" && this.searchTableColumns && (this.searchTableColumns[this.value.type] !== undefined)) {
columnToShow = this.searchTableColumns[this.value.type] == null ? [] : this.searchTableColumns[this.value.type];
}
@@ -798,9 +802,21 @@ define(['require',
}
if (this.value && this.value.searchType === "basic") {
- var def = this.entityDefCollection.fullCollection.find({ name: this.value.type });
- if (def) {
- var attrObj = Utils.getNestedSuperTypeObj({ data: def.toJSON(), collection: this.entityDefCollection, attrMerge: true });
+ var def = this.entityDefCollection.fullCollection.find({ name: this.value.type }), systemAttr = [];
+ if (def || Globals[this.value.type] || (
+ this.value.tag
+ ? Globals[this.value.tag]
+ ? Globals[this.value.tag]
+ : Globals[Enums.addOnClassification[0]]
+ : undefined)) {
+ var attrObj = def ? Utils.getNestedSuperTypeObj({ data: def.toJSON(), collection: this.entityDefCollection, attrMerge: true }) : [];
+ if (this.value.type && ( Globals[this.value.type] || Globals[Enums.addOnEntities[0]])) {
+ systemAttr = (Globals[this.value.type] || Globals[Enums.addOnEntities[0]]).attributeDefs;
+ }
+ if (this.value.tag && ( Globals[this.value.tag] || Globals[Enums.addOnClassification[0]])) {
+ systemAttr = (Globals[this.value.tag] || Globals[Enums.addOnClassification[0]]).attributeDefs;
+ }
+ attrObj = attrObj.concat(systemAttr);
_.each(attrObj, function(obj, key) {
var key = obj.name,
isRenderable = _.contains(columnToShow, key),
@@ -1222,4 +1238,4 @@ define(['require',
}
});
return SearchResultLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/search/tree/ClassificationTreeLayoutView.js b/dashboardv3/public/js/views/search/tree/ClassificationTreeLayoutView.js
index d47ae7a..7c33983 100644
--- a/dashboardv3/public/js/views/search/tree/ClassificationTreeLayoutView.js
+++ b/dashboardv3/public/js/views/search/tree/ClassificationTreeLayoutView.js
@@ -25,8 +25,9 @@ define([
"utils/CommonViewFunction",
"collection/VSearchList",
"collection/VGlossaryList",
+ "utils/Enums",
"jstree"
-], function(require, ClassificationTreeLayoutViewTmpl, Utils, Messages, Globals, UrlLinks, CommonViewFunction, VSearchList, VGlossaryList) {
+], function(require, ClassificationTreeLayoutViewTmpl, Utils, Messages, Globals, UrlLinks, CommonViewFunction, VSearchList, VGlossaryList, Enums) {
"use strict";
var ClassificationTreeLayoutView = Marionette.LayoutView.extend({
@@ -264,6 +265,11 @@ define([
this.ui.classificationSearchTree.jstree(true).select_node(dataFound.get("guid"));
}
}
+ if (!dataFound && Globals[that.options.value.tag]) {
+ this.fromManualRender = true;
+ this.typeId = Globals[that.options.value.tag].guid;
+ this.ui.classificationSearchTree.jstree(true).select_node(this.typeId);
+ }
}
},
onNodeSelect: function(options) {
@@ -489,9 +495,31 @@ define([
});
var classificationTreeData = that.isEmptyClassification ? listWithEmptyParents : listOfParents;
var flatViewClassificaton = that.isEmptyClassification ? listWithEmptyParentsFlatView : flatViewList;
- var classificationData = that.isGroupView ? classificationTreeData : flatViewClassificaton;
+ var classificationData = that.isGroupView
+ ? that.pushRootClassificationToJstree.call(that, classificationTreeData)
+ : that.pushRootClassificationToJstree.call(that, flatViewClassificaton);
return classificationData;
},
+ pushRootClassificationToJstree: function(data) {
+ var rootClassification = Globals[Enums.addOnClassification[0]];
+ var isSelected = this.options.value && this.options.value.tag ? this.options.value.tag == rootClassification.name : false;
+ var rootClassificationNode = {
+ text: _.escape(rootClassification.name),
+ name: rootClassification.name,
+ type: rootClassification.category,
+ gType: "Classification",
+ guid: "root-classification",
+ id: "root-classification",
+ model: rootClassification,
+ children: [],
+ icon: "fa fa-tag",
+ state: {
+ selected: isSelected
+ }
+ }
+ data.push(rootClassificationNode);
+ return data;
+ },
generateSearchTree: function(options) {
var $el = options && options.$el,
type = options && options.type,
@@ -783,4 +811,4 @@ define([
});
return ClassificationTreeLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js b/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js
index 864c1a2..4061d68 100644
--- a/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js
+++ b/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js
@@ -24,8 +24,9 @@ define([
"utils/CommonViewFunction",
"collection/VSearchList",
"collection/VGlossaryList",
+ 'utils/Enums',
"jstree"
-], function(require, EntityLayoutViewTmpl, Utils, Globals, UrlLinks, CommonViewFunction, VSearchList, VGlossaryList) {
+], function(require, EntityLayoutViewTmpl, Utils, Globals, UrlLinks, CommonViewFunction, VSearchList, VGlossaryList, Enums) {
"use strict";
var EntityTreeLayoutview = Marionette.LayoutView.extend({
@@ -184,6 +185,11 @@ define([
this.ui.entitySearchTree.jstree(true).select_node(dataFound.get("guid"));
}
}
+ if (!dataFound && Globals[that.options.value.type]) {
+ this.fromManualRender = true;
+ this.typeId = Globals[that.options.value.type].guid;
+ this.ui.entitySearchTree.jstree(true).select_node(this.typeId);
+ }
}
},
onNodeSelect: function(options) {
@@ -318,10 +324,39 @@ define([
var serviceTypeData = that.isEmptyServicetype ? serviceTypeWithEmptyEntity : serviceTypeArr;
if (that.isGroupView) {
- return getParentsData.call(that, serviceTypeData);
+ var serviceDataWithRootEntity = pushRootEntityToJstree.call(that,'group',serviceTypeData);
+ return getParentsData.call(that, serviceDataWithRootEntity);
+ } else {
+ return pushRootEntityToJstree.call(that, null,serviceTypeData);
+ }
+ },
+ pushRootEntityToJstree = function(type, data) {
+ var rootEntity = Globals[Enums.addOnEntities[0]];
+ var isSelected = this.options.value && this.options.value.type ? this.options.value.type == rootEntity.name : false;
+ var rootEntityNode = {
+ text: _.escape(rootEntity.name),
+ name: rootEntity.name,
+ type: rootEntity.category,
+ gType: "serviceType",
+ guid: rootEntity.guid,
+ id: rootEntity.guid,
+ model: rootEntity,
+ parent: "#",
+ icon: "fa fa-file-o",
+ state: {
+ // disabled: entityCount == 0 ? true : false,
+ selected: isSelected
+ },
+ };
+ if (type === 'group') {
+ if (data.other_types === undefined) {
+ data.other_types = { name : "other_types", children: []};
+ }
+ data.other_types.children.push(rootEntityNode);
} else {
- return serviceTypeData;
+ data.push(rootEntityNode);
}
+ return data;
},
getParentsData = function(data) {
var parents = Object.keys(data),
@@ -438,7 +473,7 @@ define([
).on("open_node.jstree", function(e, data) {
that.isTreeOpen = true;
}).on("select_node.jstree", function(e, data) {
- if (that.fromManualRender !== true) {
+ if (!that.fromManualRender) {
that.onNodeSelect(data);
} else {
that.fromManualRender = false;
@@ -508,4 +543,4 @@ define([
}
});
return EntityTreeLayoutview;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/tag/TagAttributeDetailLayoutView.js b/dashboardv3/public/js/views/tag/TagAttributeDetailLayoutView.js
index 4661e27..40029cc 100644
--- a/dashboardv3/public/js/views/tag/TagAttributeDetailLayoutView.js
+++ b/dashboardv3/public/js/views/tag/TagAttributeDetailLayoutView.js
@@ -24,8 +24,9 @@ define(['require',
'collection/VTagList',
'models/VTag',
'utils/Messages',
- 'utils/UrlLinks'
-], function(require, Backbone, TagAttributeDetailLayoutViewTmpl, Utils, AddTagAttributeView, VTagList, VTag, Messages, UrlLinks) {
+ 'utils/UrlLinks',
+ "utils/Globals",
+], function(require, Backbone, TagAttributeDetailLayoutViewTmpl, Utils, AddTagAttributeView, VTagList, VTag, Messages, UrlLinks, Globals) {
'use strict';
var TagAttributeDetailLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -96,6 +97,9 @@ define(['require',
onRender: function() {
Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.tagDetail'));
if (this.collection.models.length && !this.model) {
+ if (Globals[this.tag]) {
+ this.collection.fullCollection.push(Globals[this.tag]);
+ }
this.model = this.collection.fullCollection.findWhere({ name: this.tag });
this.renderTagDetail();
}
@@ -316,4 +320,4 @@ define(['require',
}
});
return TagAttributeDetailLayoutView;
-});
\ No newline at end of file
+});
[atlas] 02/02: ATLAS-3537 : UI: Allow users to search for deleted &
shell entities from statistics popup
Posted by kb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kbhatt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 6435223d8687423d8e6ff1c35248a368c9720879
Author: kevalbhatt <kb...@apache.org>
AuthorDate: Tue Dec 3 14:24:31 2019 +0530
ATLAS-3537 : UI: Allow users to search for deleted & shell entities from statistics popup
---
dashboardv2/public/js/templates/site/entity_tmpl.html | 8 ++++----
dashboardv3/public/js/templates/site/entity_tmpl.html | 8 ++++----
.../public/js/views/search/SearchDefaultLayoutView.js | 15 +++++++++++++--
dashboardv3/public/js/views/search/SearchLayoutView.js | 14 +++++++-------
4 files changed, 28 insertions(+), 17 deletions(-)
diff --git a/dashboardv2/public/js/templates/site/entity_tmpl.html b/dashboardv2/public/js/templates/site/entity_tmpl.html
index 974006a..ec88fd1 100644
--- a/dashboardv2/public/js/templates/site/entity_tmpl.html
+++ b/dashboardv2/public/js/templates/site/entity_tmpl.html
@@ -26,7 +26,7 @@
<tbody>
{{#each data}}
<tr>
- <td><a class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{@key}} ({{arithmetic this.active '+' this.deleted}})</a></td>
+ <td><span>{{@key}} ({{arithmetic this.active '+' this.deleted}})</span></td>
{{#if this.active}}
<td>
<a title="Search for active entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}">{{this.active}}</a>
@@ -36,14 +36,14 @@
{{/if}}
{{#if this.deleted}}
<td class="readOnlyLink">
- <a title="Search for deleted entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{this.deleted}}</a>
+ <a title="Search for deleted entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?type={{@key}}&attributes=__state%2Cdescription%2Cname%2Cowner%2Cselected%2Ctag%2CtypeName&entityFilters=AND(__state%3A%3A%3D%3A%3ADELETED%3A%3Astring)&includeDE=true&searchType=basic">{{this.deleted}}</a>
</td>
{{else}}
<td>0</td>
{{/if}}
{{#if this.shell}}
- <td>
- {{this.shell}}
+ <td class="readOnlyLink">
+ <a title="Search for shell entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?type={{@key}}&attributes=__isIncomplete%2Cdescription%2Cname%2Cowner%2Cselected%2Ctag%2CtypeName&entityFilters=AND(__isIncomplete%3A%3A%3D%3A%3A1%3A%3Ainteger)&searchType=basic">{{this.shell}}</a>
</td>
{{else}}
<td>0</td>
diff --git a/dashboardv3/public/js/templates/site/entity_tmpl.html b/dashboardv3/public/js/templates/site/entity_tmpl.html
index 974006a..ec88fd1 100644
--- a/dashboardv3/public/js/templates/site/entity_tmpl.html
+++ b/dashboardv3/public/js/templates/site/entity_tmpl.html
@@ -26,7 +26,7 @@
<tbody>
{{#each data}}
<tr>
- <td><a class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{@key}} ({{arithmetic this.active '+' this.deleted}})</a></td>
+ <td><span>{{@key}} ({{arithmetic this.active '+' this.deleted}})</span></td>
{{#if this.active}}
<td>
<a title="Search for active entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}">{{this.active}}</a>
@@ -36,14 +36,14 @@
{{/if}}
{{#if this.deleted}}
<td class="readOnlyLink">
- <a title="Search for deleted entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{this.deleted}}</a>
+ <a title="Search for deleted entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?type={{@key}}&attributes=__state%2Cdescription%2Cname%2Cowner%2Cselected%2Ctag%2CtypeName&entityFilters=AND(__state%3A%3A%3D%3A%3ADELETED%3A%3Astring)&includeDE=true&searchType=basic">{{this.deleted}}</a>
</td>
{{else}}
<td>0</td>
{{/if}}
{{#if this.shell}}
- <td>
- {{this.shell}}
+ <td class="readOnlyLink">
+ <a title="Search for shell entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?type={{@key}}&attributes=__isIncomplete%2Cdescription%2Cname%2Cowner%2Cselected%2Ctag%2CtypeName&entityFilters=AND(__isIncomplete%3A%3A%3D%3A%3A1%3A%3Ainteger)&searchType=basic">{{this.shell}}</a>
</td>
{{else}}
<td>0</td>
diff --git a/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js b/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js
index 3946cff..3716edc 100644
--- a/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchDefaultLayoutView.js
@@ -215,6 +215,17 @@ define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLa
that.RSearchResultLayoutView.show(new SearchResultLayoutView(that.options));
});
},
+ checkEntityFilter: function(options) {
+ if (options && options.value) {
+ if (options.value.type && options.value.entityFilters) {
+ options.searchTableFilters.entityFilters[options.value.type] = options.value.entityFilters;
+ }
+ if (options.value.tag && options.value.tagFilters) {
+ options.searchTableFilters.tagFilters[options.value.tag] = options.value.tagFilters;
+ }
+ }
+ return options.searchTableFilters;
+ },
onClickAttrFilter: function(filterType) {
var that = this,
obj = {
@@ -223,7 +234,7 @@ define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLa
entityDefCollection: that.options.entityDefCollection,
enumDefCollection: that.options.enumDefCollection,
classificationDefCollection: that.options.classificationDefCollection,
- searchTableFilters: that.options.searchTableFilters
+ searchTableFilters: that.checkEntityFilter(that.options)
};
this.ui.checkDeletedEntity.prop('checked', this.options.value.includeDE ? this.options.value.includeDE : false);
this.ui.checkSubClassification.prop('checked', this.options.value.excludeSC ? this.options.value.excludeSC : false);
@@ -438,4 +449,4 @@ define(["require", "backbone", "utils/Globals", "hbs!tmpl/search/SearchDefaultLa
}
);
return SearchDefaultlLayoutView;
-});
+});
\ No newline at end of file
diff --git a/dashboardv3/public/js/views/search/SearchLayoutView.js b/dashboardv3/public/js/views/search/SearchLayoutView.js
index f1f2fc2..fc1e8ba 100644
--- a/dashboardv3/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchLayoutView.js
@@ -227,12 +227,12 @@ define(['require',
_.extend(this.query[this.type], temp);
} else if (isBasicSearch) {
// Initial loading handle.
- if (filterType) {
- var filterObj = this.searchTableFilters[filterType];
- if (filterObj && this.value[key]) {
- this.searchTableFilters[filterType][this.value[key]] = this.value[filterType] ? this.value[filterType] : null;
- }
- }
+ // if (filterType) {
+ // var filterObj = this.searchTableFilters[filterType];
+ // if (filterObj && this.value[key]) {
+ // this.searchTableFilters[filterType][this.value[key]] = this.value[filterType] ? this.value[filterType] : null;
+ // }
+ // }
if (this.value.type) {
if (this.value.attributes) {
@@ -748,4 +748,4 @@ define(['require',
}
});
return SearchLayoutView;
-});
\ No newline at end of file
+});