This is an automated email from the ASF dual-hosted git repository. nixon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/atlas.git
commit ffd2e2b5df934f5266e362e6b8ad1a6d4dfa6501 Author: kevalbhatt <kbh...@apache.org> AuthorDate: Thu Mar 12 18:17:24 2020 +0530 ATLAS-3657 : UI: changes for entity purge audits Signed-off-by: nixonrodrigues <ni...@apache.org> --- dashboardv3/public/css/scss/business-metadata.scss | 14 +- dashboardv3/public/css/scss/override.scss | 2 +- dashboardv3/public/js/collection/VEntityList.js | 8 + dashboardv3/public/js/router/Router.js | 2 +- .../AdministratorLayoutView_tmpl.html | 7 +- .../PurgeAuditTableLayoutView_tmpl.html | 120 ----- .../audit/AdminAuditTableLayoutView_tmpl.html | 78 ++++ .../audit/CreateAuditTableLayoutView_tmpl.html | 2 +- dashboardv3/public/js/utils/Enums.js | 2 +- dashboardv3/public/js/utils/UrlLinks.js | 4 +- dashboardv3/public/js/utils/Utils.js | 6 + .../views/administrator/AdministratorLayoutView.js | 15 +- .../administrator/PurgeAuditTableLayoutView.js | 517 --------------------- .../js/views/audit/AdminAuditTableLayoutView.js | 369 +++++++++++++++ .../js/views/audit/CreateAuditTableLayoutView.js | 5 +- .../public/js/views/search/QueryBuilderView.js | 125 ++--- 16 files changed, 569 insertions(+), 707 deletions(-) diff --git a/dashboardv3/public/css/scss/business-metadata.scss b/dashboardv3/public/css/scss/business-metadata.scss index a521a4b..ecfddf7 100644 --- a/dashboardv3/public/css/scss/business-metadata.scss +++ b/dashboardv3/public/css/scss/business-metadata.scss @@ -67,14 +67,24 @@ } } -.business-metadata-details { - +.business-metadata-details, +.admin-details { .expandable .attr-details { max-height: 300px; overflow: auto; margin-left: 30px; width: calc(100% - 30px); } + + .admin-type-dropdown { + width: 100px; + } + + .expandable .admin-attr-details { + max-height: 100px; + margin-left: 20px; + width: calc(100% - 27px); + } } .tab-pane { diff --git a/dashboardv3/public/css/scss/override.scss b/dashboardv3/public/css/scss/override.scss index eb7e8a9..c375cd8 100644 --- a/dashboardv3/public/css/scss/override.scss +++ b/dashboardv3/public/css/scss/override.scss @@ -249,7 +249,7 @@ overflow-x: hidden; } -.purge-details { +.admin-details { .tab-pane.active { min-height: 400px; } diff --git a/dashboardv3/public/js/collection/VEntityList.js b/dashboardv3/public/js/collection/VEntityList.js index e4e2ba3..645bc0c 100644 --- a/dashboardv3/public/js/collection/VEntityList.js +++ b/dashboardv3/public/js/collection/VEntityList.js @@ -54,6 +54,14 @@ define(['require', } catch (e) { console.log(e); } + }, + getAdminData: function(options) { + var url = UrlLinks.adminApiUrl(); + options = _.extend({ + contentType: 'application/json', + dataType: 'json' + }, options); + return this.constructor.nonCrudOperation.call(this, url, 'POST', options); } }, //Static Class Members diff --git a/dashboardv3/public/js/router/Router.js b/dashboardv3/public/js/router/Router.js index 7127c40..f2c1f1d 100644 --- a/dashboardv3/public/js/router/Router.js +++ b/dashboardv3/public/js/router/Router.js @@ -486,7 +486,7 @@ define([ var that = this; require(["views/site/Header", "views/site/SideNavLayoutView", 'views/administrator/AdministratorLayoutView'], function(Header, SideNavLayoutView, AdministratorLayoutView) { var value = Utils.getUrlState.getQueryParams(), - paramObj = _.extend({ value: value, guid: null }, that.preFetchedCollectionLists); + paramObj = _.extend({ value: value, guid: null }, that.preFetchedCollectionLists, that.sharedObj); that.renderViewIfNotExists(that.getHeaderOptions(Header)); that.renderViewIfNotExists({ view: App.rSideNav, diff --git a/dashboardv3/public/js/templates/administrator/AdministratorLayoutView_tmpl.html b/dashboardv3/public/js/templates/administrator/AdministratorLayoutView_tmpl.html index cc6279a..f734c94 100644 --- a/dashboardv3/public/js/templates/administrator/AdministratorLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/administrator/AdministratorLayoutView_tmpl.html @@ -22,11 +22,12 @@ <ul class="nav nav-tabs" data-id="tab-list"> <li role="businessMetadata" class="tab active"><a href="#tab-businessMetadata" aria-controls="tab-businessMetadata" role="tab" data-toggle="tab">Business Metadata</a></li> <li role="enum"><a href="#tab-enum" aria-controls="tab-enum" role="tab" data-toggle="tab">Enumerations</a></li> + <li role="admin"><a href="#tab-admin" aria-controls="tab-admin" role="tab" data-toggle="tab">Audits</a></li> </ul> </div> </div> <div> - <div class="tab-content purge-details"> + <div class="tab-content admin-details"> <div id="tab-businessMetadata" role="businessMetadata" class="tab-pane active animated fadeIn"> <div id="r_businessMetadataTableLayoutView"> </div> @@ -35,6 +36,10 @@ <div id="r_enumTableLayoutView"> </div> </div> + <div id="tab-admin" role="admin" class="tab-pane animated fadeIn"> + <div id="r_adminTableLayoutView"> + </div> + </div> </div> </div> </div> \ No newline at end of file diff --git a/dashboardv3/public/js/templates/administrator/PurgeAuditTableLayoutView_tmpl.html b/dashboardv3/public/js/templates/administrator/PurgeAuditTableLayoutView_tmpl.html deleted file mode 100644 index ee394a9..0000000 --- a/dashboardv3/public/js/templates/administrator/PurgeAuditTableLayoutView_tmpl.html +++ /dev/null @@ -1,120 +0,0 @@ -<!-- - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. ---> -<div class="page-title clearfix"> - <!-- <div class="fontLoader"> - <i class="fa fa-refresh fa-spin-custom"></i> - </div> --> - <div class="row"> - <div class="col-sm-12 default-tab"> - <ul class="nav nav-tabs" data-id="tab-list"> - <li role="purgeaudit" class="tab active"><a href="#tab-audit" aria-controls="tab-audit" role="tab" data-toggle="tab">Audits</a></li> - <li role="namespace"><a href="#tab-namespace" aria-controls="tab-namespace" role="tab" data-toggle="tab">Namespace</a></li> - </ul> - </div> - </div> -</div> -<div> - <div class="tab-content purge-details"> - <div id="tab-audit" role="purgeaudit" class="tab-pane active animated fadeIn"> - <div id="r_auditTableLayoutView"> - <div class="fontLoader-relative"> - <i class="fa fa-refresh fa-spin-custom"></i> - </div> - <div class="position-relative"> - <div class="tableOverlay"></div> - <!-- Not for table Loader its only for initial loading --> - <div class="fontLoader"> - <i class="fa fa-refresh fa-spin-custom"></i> - </div> - <div class="attributeResultContainer form-group "> - <button class="btn-action btn-sm attribute-filter-text" data-id='purgeAttrFilter'> <i class="fa fa-angle-right"></i> Filters</button> - <div class="attribute-filter-container hide"> - <div class="panel panel-default expand_collapse_panel-icon" data-id="purgeRegion"> - <div class="panel-heading" data-toggle="collapse" href="#collapsePurge" aria-expanded="true"> - <h4 class="panel-title"> - <a>Purge</a> - </h4> - <div class="btn-group pull-right"> - <button type="button" title="Collapse"><i class="ec-icon fa"></i></button> - </div> - </div> - <div id="collapsePurge" class="panel-collapse collapse in"> - <div class="panel-body"> - <div id='r_attributeQueryBuilderPurge' class='attribute-querybuilder'> - <div class='fontLoader'><i class='fa fa-refresh fa-spin-custom'></i></div> - </div> - </div> - </div> - </div> - <div class='attribute-result-footer'> - <div type="ok" class="btn btn-atlas ok search" data-id='attrApply'>Apply</div> - <div type="ok" class="btn btn-atlas ok" data-id='attrClose'>Close</div> - </div> - </div> - <div class="pull-right"> - <select class="pull-right form-controlrow-margin-bottom" data-id="purgeType"></select> - </div> - </div> - <div class='attr-filter-overlay hide'></div> - <div class="auditTable" style="display: none"> - <div id="r_purgeAuditTableLayoutView"></div> - <div> - <span class="labelShowRecord pull-left" data-id="pageRecordText"></span> - </div> - <div class="pagination-box"> - <div class="backgrid-paginator pull-right"> - <ul> - <li> - <button type="button" data-id="previousAuditData" title="Previous" disabled=true> - <i class="fa fa-angle-left" aria-hidden="true"></i> - </button> - </li> - <li class="active"> - <a href="javascript:void(0)" data-id="activePage"></a> - </li> - <li> - <button type="button" data-id="nextAuditData" title="Next"> - <i class="fa fa-angle-right" aria-hidden="true"></i> - </button> - </li> - </ul> - </div> - </div> - </div> - </div> - </div> - <div class="no-data" data-id="showDefault"> - <div class="position-relative thick-border"> - <div style="padding-top: 20px; " class="table-responsive tableBorder"> - <table class="table table-hover backgrid table-quickMenu"> - <tbody> - <tr class="empty"> - <td colspan="16"><span>No Records found!</span></td> - </tr> - </tbody> - </table> - </div> - </div> - </div> - </div> - <div id="tab-namespace" role="namespace" class="tab-pane animated fadeIn"> - <div id="r_namespaceTableLayoutView"> - </div> - </div> - </div> -</div> -</div> \ No newline at end of file diff --git a/dashboardv3/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html b/dashboardv3/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html new file mode 100644 index 0000000..5e5f897 --- /dev/null +++ b/dashboardv3/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html @@ -0,0 +1,78 @@ +<!-- + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +--> +<div class="tab-content admin-details"> + <div id="tab-audit" role="adminaudit"> + <div id="r_auditTableLayoutView"> + <div class="fontLoader-relative"> + <i class="fa fa-refresh fa-spin-custom"></i> + </div> + <div class="position-relative"> + <div class="tableOverlay"></div> + <!-- Not for table Loader its only for initial loading --> + <div class="fontLoader"> + <i class="fa fa-refresh fa-spin-custom"></i> + </div> + <div class="attributeResultContainer form-group "> + <button class="btn-action btn-sm attribute-filter-text" data-id='adminAttrFilter'> <i class="fa fa-angle-right"></i> Filters</button> + <div class="attribute-filter-container hide"> + <div class="panel panel-default expand_collapse_panel-icon" data-id="adminRegion"> + <div class="panel-heading" data-toggle="collapse" href="#collapseAdmin" aria-expanded="true"> + <h4 class="panel-title"> + <a>Admin</a> + </h4> + <div class="btn-group pull-right"> + <button type="button" title="Collapse"><i class="ec-icon fa"></i></button> + </div> + </div> + <div id="collapseAdmin" class="panel-collapse collapse in"> + <div class="panel-body"> + <div id='r_attributeQueryBuilderAdmin' class='attribute-querybuilder'> + <div class='fontLoader'><i class='fa fa-refresh fa-spin-custom'></i></div> + </div> + </div> + </div> + </div> + <div class='attribute-result-footer'> + <div type="ok" class="btn btn-atlas ok search" data-id='attrApply'>Apply</div> + <div type="ok" class="btn btn-atlas ok" data-id='attrClose'>Close</div> + </div> + </div> + <div class="pull-right admin-type-dropdown"> + <select class="pull-right form-controlrow-margin-bottom" data-id="adminType"></select> + </div> + </div> + <div class="auditTable" style="display: none"> + <div class='attr-filter-overlay hide'></div> + <div id="r_adminAuditTableLayoutView"></div> + </div> + </div> + </div> + <div class="no-data" data-id="showDefault"> + <div class="position-relative thick-border"> + <div style="padding-top: 20px; " class="table-responsive tableBorder"> + <table class="table table-hover backgrid table-quickMenu"> + <tbody> + <tr class="empty"> + <td colspan="16"><span>No Records found!</span></td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + </div> +</div> \ No newline at end of file diff --git a/dashboardv3/public/js/templates/audit/CreateAuditTableLayoutView_tmpl.html b/dashboardv3/public/js/templates/audit/CreateAuditTableLayoutView_tmpl.html index 1ff67d3..10cc697 100644 --- a/dashboardv3/public/js/templates/audit/CreateAuditTableLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/audit/CreateAuditTableLayoutView_tmpl.html @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. --> -<h4 class="entity-name" style="word-break: break-word;">Name: <span data-id="name"></span></h4> +<h4 class="entity-name" style="word-break: break-word;" data-id="nameContainer">Name: <span data-id="name"></span></h4> <div class="panel-group server-stats-container auditStatusContainer clearfix" id="accordion"> <div class="panel panel-default custom-panel expand_collapse_panel-icon hide col-sm-5" data-id="detailsAttribute"> <div class="panel-heading" data-toggle="collapse" href="#detailAttributeTableCollapse" aria-expanded="true"> diff --git a/dashboardv3/public/js/utils/Enums.js b/dashboardv3/public/js/utils/Enums.js index e5cba08..ef93b77 100644 --- a/dashboardv3/public/js/utils/Enums.js +++ b/dashboardv3/public/js/utils/Enums.js @@ -212,4 +212,4 @@ define(['require'], function(require) { 1: "true" }; return Enums; -}); +}); \ No newline at end of file diff --git a/dashboardv3/public/js/utils/UrlLinks.js b/dashboardv3/public/js/utils/UrlLinks.js index 95ca065..17d2bdf 100644 --- a/dashboardv3/public/js/utils/UrlLinks.js +++ b/dashboardv3/public/js/utils/UrlLinks.js @@ -227,8 +227,8 @@ define(['require', 'utils/Enums', 'utils/Utils', 'underscore'], function(require sessionApiUrl: function() { return this.baseUrl + '/admin/session'; }, - purgeApiUrl: function() { - return this.baseUrl + '/admin/audit'; + adminApiUrl: function() { + return this.baseUrl + '/admin/audits'; } }); diff --git a/dashboardv3/public/js/utils/Utils.js b/dashboardv3/public/js/utils/Utils.js index bb33102..2d7d433 100644 --- a/dashboardv3/public/js/utils/Utils.js +++ b/dashboardv3/public/js/utils/Utils.js @@ -411,6 +411,12 @@ define(['require', 'utils/Globals', 'pnotify', 'utils/Messages', 'utils/Enums', matchString: "detailPage" }); }, + isPurgePage: function(url) { + return this.checkTabUrl({ + url: url, + matchString: "purge" + }); + }, getLastValue: function() { return this.getQueryUrl().lastValue; }, diff --git a/dashboardv3/public/js/views/administrator/AdministratorLayoutView.js b/dashboardv3/public/js/views/administrator/AdministratorLayoutView.js index 78d7cd1..49f4635 100644 --- a/dashboardv3/public/js/views/administrator/AdministratorLayoutView.js +++ b/dashboardv3/public/js/views/administrator/AdministratorLayoutView.js @@ -38,7 +38,8 @@ define(['require', /** Layout sub regions */ regions: { RBusinessMetadataTableLayoutView: "#r_businessMetadataTableLayoutView", - REnumTableLayoutView: '#r_enumTableLayoutView' + REnumTableLayoutView: '#r_enumTableLayoutView', + RAdminTableLayoutView: '#r_adminTableLayoutView' }, /** ui selector cache */ @@ -67,7 +68,7 @@ define(['require', * @constructs */ initialize: function(options) { - _.extend(this, _.pick(options, 'value', 'guid', 'entityDefCollection', 'businessMetadataDefCollection', 'enumDefCollection')); + _.extend(this, _.pick(options, 'value', 'entityDefCollection', 'businessMetadataDefCollection', 'enumDefCollection', 'searchTableFilters')); }, onShow: function() { @@ -79,6 +80,7 @@ define(['require', }, bindEvents: function() { this.renderEnumLayoutView(); + this.renderAdminLayoutView(); }, onRender: function() { this.renderBusinessMetadataLayoutView(); @@ -99,6 +101,15 @@ define(['require', }); that.REnumTableLayoutView.show(view); }); + }, + renderAdminLayoutView: function(obj) { + var that = this; + require(["views/audit/AdminAuditTableLayoutView"], function(AdminAuditTableLayoutView) { + var view = new AdminAuditTableLayoutView({ + searchTableFilters: that.searchTableFilters + }); + that.RAdminTableLayoutView.show(view); + }); } }); return AdministratorLayoutView; diff --git a/dashboardv3/public/js/views/administrator/PurgeAuditTableLayoutView.js b/dashboardv3/public/js/views/administrator/PurgeAuditTableLayoutView.js deleted file mode 100644 index ada59d2..0000000 --- a/dashboardv3/public/js/views/administrator/PurgeAuditTableLayoutView.js +++ /dev/null @@ -1,517 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -define(['require', - 'backbone', - 'hbs!tmpl/audit/PurgeAuditTableLayoutView_tmpl', - 'collection/VEntityList', - 'models/VSearch', - 'utils/Utils', - 'utils/Enums', - 'utils/UrlLinks', - 'utils/CommonViewFunction' -], function(require, Backbone, PurgeAuditTableLayoutView_tmpl, VEntityList, VSearch, Utils, Enums, UrlLinks, CommonViewFunction) { - 'use strict'; - - var PurgeAuditTableLayoutView = Backbone.Marionette.LayoutView.extend( - /** @lends AuditTableLayoutView */ - { - _viewName: 'PurgeAuditTableLayoutView', - - template: PurgeAuditTableLayoutView_tmpl, - - /** Layout sub regions */ - regions: { - RAuditTableLayoutView: "#r_purgeAuditTableLayoutView", - RQueryBuilderPurge: "#r_attributeQueryBuilderPurge", - RNamespaceTableLayoutView: "#r_namespaceTableLayoutView" - }, - - /** ui selector cache */ - ui: { - auditCreate: "[data-id='auditCreate']", - previousAuditData: "[data-id='previousAuditData']", - nextAuditData: "[data-id='nextAuditData']", - pageRecordText: "[data-id='pageRecordText']", - activePage: "[data-id='activePage']", - purgeEntityClick: "[data-id='purgeEntity']", - purgeType: "[data-id='purgeType']", - attrFilter: "[data-id='purgeAttrFilter']", - purgeRegion: "[data-id='purgeRegion']", - attrApply: "[data-id='attrApply']", - showDefault: "[data-id='showDefault']", - attrClose: "[data-id='attrClose']", - tablist: '[data-id="tab-list"] li' - }, - /** ui events hash */ - events: function() { - var events = {}, - that = this; - events["click " + this.ui.purgeEntityClick] = "onClickPurgeEntity"; - events["change " + this.ui.purgeType] = "onClickPurgeType"; - events["click " + this.ui.nextAuditData] = "onClickNextAuditData"; - events["click " + this.ui.previousAuditData] = "onClickPreviousAuditData"; - events["click " + this.ui.attrFilter] = function(e) { - // this.$('.fa-chevron-right').toggleClass('fa-chevron-down'); - this.$('.fa-angle-right').toggleClass('fa-angle-down'); - this.$('.attributeResultContainer').addClass("overlay"); - this.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); - // this.$('.attribute-filter-container').toggleClass('attribute-filter-container') - this.onClickAttrFilter(); - }; - events["click " + this.ui.attrClose] = function(e) { - that.closeAttributeModel(); - }; - events["click " + this.ui.attrApply] = function(e) { - that.okAttrFilterButton(e); - }; - events["click " + this.ui.tablist] = function(e) { - var tabValue = $(e.currentTarget).attr('role'); - Utils.setUrl({ - url: Utils.getUrlState.getQueryUrl().queyParams[0], - urlParams: { tabActive: tabValue || 'properties' }, - mergeBrowserUrl: false, - trigger: false, - updateTabState: true - }); - - }; - return events; - }, - /** - * intialize a new AuditTableLayoutView Layout - * @constructs - */ - initialize: function(options) { - _.extend(this, _.pick(options, 'value', 'guid', 'entity', 'entityName', 'attributeDefs', 'nameSpaceCollection')); - this.entityCollection = new VEntityList(); - this.limit = 26; - this.entityCollection.url = UrlLinks.purgeApiUrl(); - this.entityCollection.modelAttrName = "events"; - this.entityModel = new this.entityCollection.model(); - this.pervOld = []; - this.onlyPurge = true; - this.commonTableOptions = { - collection: this.entityCollection, - includeFilter: false, - includePagination: false, - includePageSize: false, - includeAtlasTableSorting: true, - includeFooterRecords: false, - gridOpts: { - className: "table table-hover backgrid table-quickMenu", - emptyText: 'No records found!' - }, - filterOpts: {}, - paginatorOpts: {} - }; - this.currPage = 1; - this.isFilters = null; - this.purgeAttrFilters = [{ - "id": "startTime", - "label": "startTime (date)", - "operators": [ - "=", - "!=", - ">", - "<", - ">=", - "<=" - ], - "optgroup": "Select Purge Attribute", - "plugin": "daterangepicker", - "plugin_config": { - "locale": { - "format": "MM/DD/YYYY h:mm A" - }, - "showDropdowns": true, - "singleDatePicker": true, - "timePicker": true - }, - "type": "date" - }, { - "id": "endTime", - "label": "endTime (date)", - "operators": [ - "=", - "!=", - ">", - "<", - ">=", - "<=" - ], - "optgroup": "Select Purge Attribute", - "plugin": "daterangepicker", - "plugin_config": { - "locale": { - "format": "MM/DD/YYYY h:mm A" - }, - "showDropdowns": true, - "singleDatePicker": true, - "timePicker": true - }, - "type": "date" - }] - }, - onRender: function() { - var str = '<option>All</option><option>Purge</option>'; - this.ui.purgeType.html(str); - this.ui.purgeType.select2({}); - this.bindEvents(); - this.ui.purgeRegion.hide(); - this.getPurgeParam(); - this.entityCollection.comparator = function(model) { - return -model.get('timestamp'); - } - }, - onShow: function() { - if (this.value && this.value.tabActive) { - this.$('.nav.nav-tabs').find('[role="' + this.value.tabActive + '"]').addClass('active').siblings().removeClass('active'); - this.$('.tab-content').find('[role="' + this.value.tabActive + '"]').addClass('active').siblings().removeClass('active'); - $("html, body").animate({ scrollTop: (this.$('.tab-content').offset().top + 1200) }, 1000); - } - }, - bindEvents: function() { - this.renderNameSpaceLayoutView(); - }, - - renderNameSpaceLayoutView: function(obj) { - var that = this; - require(['views/name_space/AllNameSpaceTableLayoutView'], function(AllNameSpaceTableLayoutView) { - that.RNamespaceTableLayoutView.show(new AllNameSpaceTableLayoutView({ nameSpaceCollection: that.nameSpaceCollection })); - }); - }, - getToOffset: function() { - return ((this.limit - 1) * this.currPage); - }, - getFromOffset: function(toOffset) { - // +2 because of toOffset is alrady in minus and limit is +1; - return ((toOffset - this.limit) + 2); - }, - renderOffset: function(options) { - var entityLength; - if (options.nextClick) { - options.previous.removeAttr("disabled"); - if (this.entityCollection.length != 0) { - this.currPage++; - - } - } else if (options.previousClick) { - options.next.removeAttr("disabled"); - if (this.currPage > 1 && this.entityCollection.models.length) { - this.currPage--; - } - } - if (this.entityCollection.models.length === this.limit) { - // Because we have 1 extra record. - entityLength = this.entityCollection.models.length - 1; - } else { - entityLength = this.entityCollection.models.length - } - this.ui.activePage.attr('title', "Page " + this.currPage); - this.ui.activePage.text(this.currPage); - var toOffset = this.getToOffset(); - this.ui.pageRecordText.html("Showing <u>" + entityLength + " records</u> From " + this.getFromOffset(toOffset) + " - " + toOffset); - }, - getPurgeParam: function() { - var that = this; - that.fetchCollection({ - next: that.ui.nextAuditData, - nextClick: false, - previous: that.ui.previousAuditData, - isPurge: that.onlyPurge - }); - }, - closeAttributeModel: function() { - var that = this; - that.$('.attributeResultContainer').removeClass("overlay"); - that.$('.fa-angle-right').toggleClass('fa-angle-down'); - that.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); - }, - getAttributes: function() { - var purgeAttributes = [{ - "attributeName": "operation", - "operator": "like", - "attributeValue": "PURGE" - }]; - if (!this.onlyPurge) { - purgeAttributes.push({ - "attributeName": "userName", - "operator": "like", - "attributeValue": "admin" - }) - } - if (this.isFilters) { - _.each(this.isFilters, function(purgeFilter) { - purgeAttributes.push({ - "attributeName": purgeFilter.id, - "operator": purgeFilter.operator, - "attributeValue": Date.parse(purgeFilter.value).toString(), - }) - }) - this.isFilters = null; - } - return purgeAttributes; - }, - - renderQueryBuilder: function(obj, rQueryBuilder) { - var that = this; - require(['views/search/QueryBuilderView'], function(QueryBuilderView) { - rQueryBuilder.show(new QueryBuilderView(obj)); - }); - }, - onClickAttrFilter: function() { - var that = this; - this.ui.purgeRegion.show(); - require(['views/search/QueryBuilderView'], function(QueryBuilderView) { - that.RQueryBuilderPurge.show(new QueryBuilderView({ purgeAttrFilters: that.purgeAttrFilters })); - }); - - }, - okAttrFilterButton: function(options) { - var that = this, - isFilterValidate = true, - queryBuilderRef = that.RQueryBuilderPurge.currentView.ui.builder; - if (queryBuilderRef.data("queryBuilder")) { - var queryBuilder = queryBuilderRef.queryBuilder("getRules"); - queryBuilder ? that.isFilters = queryBuilder.rules : isFilterValidate = false; - } - if (isFilterValidate) { - that.closeAttributeModel(); - that.getPurgeParam(); - } - }, - fetchCollection: function(options) { - var that = this, - purgeParam = { - condition: "AND", - criterion: that.getAttributes() - }; - this.$('.fontLoader').show(); - this.$('.tableOverlay').show(); - if (that.entityCollection.models.length > 1) { - if (options.nextClick) { - this.pervOld.push(that.entityCollection.first().get('eventKey')); - } - } - var apiObj = { - sort: false, - success: function(dataOrCollection, response) { - if (!(that.ui.pageRecordText instanceof jQuery)) { - return; - } - that.entityCollection.fullCollection.reset(dataOrCollection); - if (that.entityCollection.models.length < that.limit) { - options.previous.attr('disabled', true); - options.next.attr('disabled', true); - } - that.renderOffset(options); - that.entityCollection.sort(); - if (that.entityCollection.models.length) { - if (that.entityCollection && (that.entityCollection.models.length < that.limit && that.currPage == 1) && that.next == that.entityCollection.last().get('eventKey')) { - options.next.attr('disabled', true); - options.previous.removeAttr("disabled"); - } else { - that.next = that.entityCollection.last().get('eventKey'); - if (that.pervOld.length === 0) { - options.previous.attr('disabled', true); - } - } - } - that.renderTableLayoutView(); - that.$('.fontLoader').hide(); - that.$('.tableOverlay').hide(); - that.$('.auditTable').show(); // Only for first time table show because we never hide after first render. - }, - silent: true, - reset: true - } - $.extend(that.entityCollection.queryParams, { limit: 25, offset: 0, auditFilters: purgeParam }); - $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.entityCollection.queryParams) }) - this.entityCollection.constructor.nonCrudOperation.call(this, UrlLinks.purgeApiUrl(), "POST", apiObj); - }, - renderTableLayoutView: function() { - var that = this; - - this.ui.showDefault.hide(); - require(['utils/TableLayout'], function(TableLayout) { - var cols = new Backgrid.Columns(that.getAuditTableColumns()); - that.RAuditTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, { - columns: cols - }))); - if (!(that.entityCollection.models.length < that.limit)) { - that.RAuditTableLayoutView.$el.find('table tr').last().hide(); - } - }); - }, - getAuditTableColumns: function() { - var that = this; - return this.entityCollection.constructor.getTableCols({ - result: { - label: "", - cell: "html", - editable: false, - sortable: false, - cell: Backgrid.ExpandableCell, - fixWidth: "20", - accordion: false, - expand: function(el, model) { - var purgeValues = ''; - if (model.attributes.params) { - var guids = model.attributes.result.replace('[', '').replace(']', '').split(','); - _.each(guids, function(purgeGuid) { - // purgeGuid.trim(); - purgeValues += '<a class="blue-link" data-id="purgeEntity" >' + purgeGuid.trim() + '</a></br>'; - }) - } else { - purgeValues = ''; - } - var purgeText = '<div class="row"><div class="col-sm-2">Purge Entities: </div><div class="col-sm-10">' + purgeValues + '</div></div>'; - /* set expanded row's content */ - $(el).append($('<div>').html(purgeText)); - - } - }, - userName: { - label: "Users", - cell: "html", - editable: false, - sortable: function(e, attr, order) { - return function(left, right) { - - // no-op - if (order == null) return 0; - - var l = left.get(attr), - r = right.get(attr), - t; - - // if descending order, swap left and right - if (order === 1) t = l, l = r, r = t; - - // compare as usual - if (l === r) return 0; - else if (l < r) return -1; - return 1; - } - } - }, - operation: { - label: "Operation", - cell: "String", - editable: false, - formatter: _.extend({}, Backgrid.CellFormatter.prototype, { - fromRaw: function(rawValue, model) { - if (rawValue === "PURGE" && model.attributes.params) { - var purgeLength = model.attributes.result.replace('[', '').replace(']', '').split(',').length; - return purgeLength === 1 ? purgeLength + " entity purged." : purgeLength + " entities purged."; - } else { - return "No entity purged."; - } - - } - }) - }, - clientId: { - label: "Client ID", - cell: "String", - editable: false - }, - startTime: { - label: "Start Time", - cell: "html", - editable: false, - formatter: _.extend({}, Backgrid.CellFormatter.prototype, { - fromRaw: function(rawValue, model) { - return new Date(rawValue); - } - }) - }, - endTime: { - label: "End Time", - cell: "html", - editable: false, - formatter: _.extend({}, Backgrid.CellFormatter.prototype, { - fromRaw: function(rawValue, model) { - return new Date(rawValue); - } - }) - } - }, this.entityCollection); - - }, - onClickPurgeType: function(e, value) { - this.onlyPurge = e.currentTarget.value === "Purge" ? true : false; - this.getPurgeParam(); - }, - onClickPurgeEntity: function(e) { - var that = this; - require([ - 'modules/Modal', 'views/audit/AuditTableLayoutView', 'views/audit/CreateAuditTableLayoutView', - ], function(Modal, AuditTableLayoutView, CreateAuditTableLayoutView) { - var obj = { - guid: $(e.target).text(), - }, - modal = new Modal({ - title: "Purged Entity Details : " + obj.guid, - content: new AuditTableLayoutView(obj), - mainClass: "modal-full-screen", - okCloses: true, - showFooter: false, - }).open(); - - modal.on('closeModal', function() { - $('.modal').css({ 'padding-right': '0px !important' }); - modal.trigger('cancel'); - }); - modal.$el.on('click', 'td a', function() { - modal.trigger('cancel'); - }); - }); - }, - onClickNextAuditData: function() { - var that = this; - this.ui.previousAuditData.removeAttr("disabled"); - $.extend(this.entityCollection.queryParams, { - startKey: function() { - return that.next; - } - }); - this.fetchCollection({ - next: this.ui.nextAuditData, - nextClick: true, - previous: this.ui.previousAuditData - }); - }, - onClickPreviousAuditData: function() { - var that = this; - this.ui.nextAuditData.removeAttr("disabled"); - $.extend(this.entityCollection.queryParams, { - startKey: function() { - return that.pervOld.pop(); - } - }); - this.fetchCollection({ - next: this.ui.nextAuditData, - previousClick: true, - previous: this.ui.previousAuditData - }); - }, - }); - return PurgeAuditTableLayoutView; -}); \ No newline at end of file diff --git a/dashboardv3/public/js/views/audit/AdminAuditTableLayoutView.js b/dashboardv3/public/js/views/audit/AdminAuditTableLayoutView.js new file mode 100644 index 0000000..6b4cfb7 --- /dev/null +++ b/dashboardv3/public/js/views/audit/AdminAuditTableLayoutView.js @@ -0,0 +1,369 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'backbone', + 'hbs!tmpl/audit/AdminAuditTableLayoutView_tmpl', + 'collection/VEntityList', + 'utils/Utils', + 'utils/UrlLinks', + 'utils/CommonViewFunction' +], function(require, Backbone, AdminAuditTableLayoutView_tmpl, VEntityList, Utils, UrlLinks, CommonViewFunction) { + 'use strict'; + + var AdminAuditTableLayoutView = Backbone.Marionette.LayoutView.extend( + /** @lends AuditTableLayoutView */ + { + _viewName: 'AdminAuditTableLayoutView', + + template: AdminAuditTableLayoutView_tmpl, + + /** Layout sub regions */ + regions: { + RAuditTableLayoutView: "#r_adminAuditTableLayoutView", + RQueryBuilderAdmin: "#r_attributeQueryBuilderAdmin" + }, + + /** ui selector cache */ + ui: { + adminEntityClick: "[data-id='adminEntity']", + adminType: "[data-id='adminType']", + attrFilter: "[data-id='adminAttrFilter']", + adminRegion: "[data-id='adminRegion']", + attrApply: "[data-id='attrApply']", + showDefault: "[data-id='showDefault']", + attrClose: "[data-id='attrClose']" + }, + /** ui events hash */ + events: function() { + var events = {}, + that = this; + events["click " + this.ui.adminEntityClick] = "onClickAdminEntity"; + events["change " + this.ui.adminType] = "onClickAdminType"; + events["click " + this.ui.attrFilter] = function(e) { + this.$('.fa-angle-right').toggleClass('fa-angle-down'); + this.$('.attributeResultContainer').addClass("overlay"); + this.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); + this.onClickAttrFilter(); + }; + events["click " + this.ui.attrClose] = function(e) { + that.closeAttributeModel(); + }; + events["click " + this.ui.attrApply] = function(e) { + that.okAttrFilterButton(e); + }; + return events; + }, + /** + * intialize a new AdminTableLayoutView Layout + * @constructs + */ + initialize: function(options) { + _.extend(this, _.pick(options, 'searchTableFilters')); + this.entityCollection = new VEntityList(); + this.limit = 25; + this.entityCollection.url = UrlLinks.adminApiUrl(); + this.entityCollection.modelAttrName = "events"; + this.onlyAdmin = true; + this.commonTableOptions = { + collection: this.entityCollection, + includeFilter: false, + includePagination: true, + includeFooterRecords: true, + includePageSize: true, + includeAtlasTableSorting: true, + includeTableLoader: true, + includeColumnManager: false, + gridOpts: { + className: "table table-hover backgrid table-quickMenu", + emptyText: 'No records found!' + }, + columnOpts: { + opts: { + initialColumnsVisible: null, + saveState: false + }, + visibilityControlOpts: { + buttonTemplate: _.template("<button class='btn btn-action btn-sm pull-right'>Columns <i class='fa fa-caret-down'></i></button>") + }, + el: this.ui.colManager + }, + filterOpts: {}, + paginatorOpts: {} + }; + this.isFilters = null; + this.adminAttrFilters = [{ + "id": "startTime", + "label": "startTime (date)", + "operators": [ + "=", + "!=", + ">", + "<", + ">=", + "<=" + ], + "plugin": "daterangepicker", + "plugin_config": { + "locale": { + "format": "MM/DD/YYYY h:mm A" + }, + "showDropdowns": true, + "singleDatePicker": true, + "timePicker": true + }, + "type": "date" + }, { + "id": "endTime", + "label": "endTime (date)", + "operators": [ + "=", + "!=", + ">", + "<", + ">=", + "<=" + ], + "plugin": "daterangepicker", + "plugin_config": { + "locale": { + "format": "MM/DD/YYYY h:mm A" + }, + "showDropdowns": true, + "singleDatePicker": true, + "timePicker": true + }, + "type": "date" + }] + }, + onRender: function() { + var str = '<option>All</option><option>Admin</option>'; + this.ui.adminType.html(str); + this.ui.adminType.select2({}); + this.ui.adminRegion.hide(); + this.getAdminCollection(); + this.entityCollection.comparator = function(model) { + return -model.get('timestamp'); + } + }, + bindEvents: function() {}, + closeAttributeModel: function() { + var that = this; + that.$('.attributeResultContainer').removeClass("overlay"); + that.$('.fa-angle-right').toggleClass('fa-angle-down'); + that.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); + }, + getAttributes: function() { + var adminAttributes = [{ + "attributeName": "userName", + "operator": "like", + "attributeValue": "admin" + }]; + if (!this.onlyAdmin) { + adminAttributes.push({ + "attributeName": "operation", + "operator": "like", + "attributeValue": "PURGE" + }) + } + if (this.isFilters) { + _.each(this.isFilters, function(adminFilter) { + adminAttributes.push({ + "attributeName": adminFilter.id, + "operator": adminFilter.operator, + "attributeValue": Date.parse(adminFilter.value).toString(), + }) + }) + this.isFilters = null; + } + return adminAttributes; + }, + onClickAttrFilter: function() { + var that = this; + this.ui.adminRegion.show(); + require(['views/search/QueryBuilderView'], function(QueryBuilderView) { + that.RQueryBuilderAdmin.show(new QueryBuilderView({ adminAttrFilters: that.adminAttrFilters, searchTableFilters: that.searchTableFilters })); + }); + }, + okAttrFilterButton: function(options) { + var that = this, + isFilterValidate = true, + queryBuilderRef = that.RQueryBuilderAdmin.currentView.ui.builder; + if (queryBuilderRef.data("queryBuilder")) { + var queryBuilder = queryBuilderRef.queryBuilder("getRules"); + if (queryBuilder) { + that.isFilters = queryBuilder.rules; + that.searchTableFilters["adminAttrFilters"] = CommonViewFunction.attributeFilter.generateUrl({ value: queryBuilder, formatedDateToLong: true }); + } else { + isFilterValidate = false + } + } + if (isFilterValidate) { + that.closeAttributeModel(); + that.getAdminCollection(); + } + }, + getAdminCollection: function() { + var that = this, + adminParam = { + condition: "AND", + criterion: that.getAttributes() + }; + this.$('.fontLoader').show(); + this.$('.tableOverlay').show(); + $.extend(that.entityCollection.queryParams, { limit: this.limit, offset: 0, auditFilters: adminParam }); + var apiObj = { + sort: false, + data: that.entityCollection.queryParams, + success: function(dataOrCollection, response) { + that.entityCollection.fullCollection.reset(dataOrCollection); + that.renderTableLayoutView(); + that.$('.fontLoader').hide(); + that.$('.tableOverlay').hide(); + that.$('.auditTable').show(); + }, + silent: true, + reset: true + } + this.entityCollection.getAdminData(apiObj); + }, + renderTableLayoutView: function() { + var that = this; + this.ui.showDefault.hide(); + require(['utils/TableLayout'], function(TableLayout) { + var cols = new Backgrid.Columns(that.getAuditTableColumns()); + that.RAuditTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, { + columns: cols + }))); + }); + }, + getAuditTableColumns: function() { + var that = this; + return this.entityCollection.constructor.getTableCols({ + result: { + label: "", + cell: "html", + editable: false, + sortable: false, + cell: Backgrid.ExpandableCell, + fixWidth: "20", + accordion: false, + alwaysVisible: true, + expand: function(el, model) { + var adminValues = '<div class="col-sm-6">', + newColumn = ''; + el.attr('colspan', '6'); + if (model.attributes.params) { + var guids = model.attributes.result.replace('[', '').replace(']', '').split(','); + _.each(guids, function(adminGuid, index) { + if (index % 5 == 0 && index != 0) { + adminValues += '</div><div class="col-sm-6">'; + } + adminValues += '<a class="blue-link" data-id="adminEntity" >' + adminGuid.trim() + '</a></br>'; + }) + adminValues += '</div>'; + + } else { + adminValues = ''; + } + var adminText = '<div class="row"><div class="col-sm-12 attr-details admin-attr-details"><div class="col-sm-2">Admin Entities: </div><div class="col-sm-10">' + adminValues + '</div></div></div>'; + $(el).append($('<div>').html(adminText)); + + } + }, + userName: { + label: "Users", + cell: "html", + editable: false + }, + operation: { + label: "Operation", + cell: "String", + editable: false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function(rawValue, model) { + if (rawValue === "PURGE" && model.attributes.params) { + var adminLength = model.attributes.result.replace('[', '').replace(']', '').split(',').length; + return adminLength === 1 ? adminLength + " entity purged." : adminLength + " entities purged."; + } else { + return "No entity purged."; + } + + } + }) + }, + clientId: { + label: "Client ID", + cell: "String", + editable: false + }, + startTime: { + label: "Start Time", + cell: "html", + editable: false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function(rawValue, model) { + return new Date(rawValue); + } + }) + }, + endTime: { + label: "End Time", + cell: "html", + editable: false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function(rawValue, model) { + return new Date(rawValue); + } + }) + } + }, this.entityCollection); + + }, + onClickAdminType: function(e, value) { + this.onlyAdmin = e.currentTarget.value === "Admin" ? false : true; + this.getAdminCollection(); + }, + onClickAdminEntity: function(e) { + var that = this; + require([ + 'modules/Modal', 'views/audit/AuditTableLayoutView', 'views/audit/CreateAuditTableLayoutView', + ], function(Modal, AuditTableLayoutView, CreateAuditTableLayoutView) { + var obj = { + guid: $(e.target).text(), + }, + modal = new Modal({ + title: "Admin Entity Details : " + obj.guid, + content: new AuditTableLayoutView(obj), + mainClass: "modal-full-screen", + okCloses: true, + showFooter: false, + }).open(); + + modal.on('closeModal', function() { + $('.modal').css({ 'padding-right': '0px !important' }); + modal.trigger('cancel'); + }); + modal.$el.on('click', 'td a', function() { + modal.trigger('cancel'); + }); + }); + } + }); + return AdminAuditTableLayoutView; +}); \ No newline at end of file diff --git a/dashboardv3/public/js/views/audit/CreateAuditTableLayoutView.js b/dashboardv3/public/js/views/audit/CreateAuditTableLayoutView.js index 89f5337..f7db536 100644 --- a/dashboardv3/public/js/views/audit/CreateAuditTableLayoutView.js +++ b/dashboardv3/public/js/views/audit/CreateAuditTableLayoutView.js @@ -39,6 +39,7 @@ define(['require', ui: { auditValue: "[data-id='auditValue']", name: "[data-id='name']", + nameContainer: "[data-id='nameContainer']", noData: "[data-id='noData']", tableAudit: "[data-id='tableAudit']", auditHeaderValue: "[data-id='auditHeaderValue']", @@ -156,8 +157,8 @@ define(['require', that.noDetailsShow(); } - } else if (detailObj == "Deleted entity") { - that.updateName(this.entityName ? this.entityName : "Entity"); + } else if (detailObj == "Deleted entity" || detailObj == "Purged entity") { + this.entityName ? that.updateName(this.entityName) : this.ui.nameContainer.empty().append("<h4 class='text-center'><i>No Records Found!</i></h4>"); } } }); diff --git a/dashboardv3/public/js/views/search/QueryBuilderView.js b/dashboardv3/public/js/views/search/QueryBuilderView.js index a96f39c..fc16d6c 100644 --- a/dashboardv3/public/js/views/search/QueryBuilderView.js +++ b/dashboardv3/public/js/views/search/QueryBuilderView.js @@ -54,9 +54,8 @@ define(['require', * @constructs */ initialize: function(options) { - _.extend(this, _.pick(options, 'attrObj', 'value', 'typeHeaders', 'entityDefCollection', 'enumDefCollection', 'classificationDefCollection', 'tag', 'type', 'searchTableFilters', 'systemAttrArr')); + _.extend(this, _.pick(options, 'attrObj', 'value', 'typeHeaders', 'entityDefCollection', 'enumDefCollection', 'classificationDefCollection', 'businessMetadataDefCollection', 'tag', 'type', 'searchTableFilters', 'systemAttrArr', 'adminAttrFilters')); this.attrObj = _.sortBy(this.attrObj, 'name'); - //this.systemAttrArr = _.sortBy(this.systemAttrArr, 'name'); this.filterType = this.tag ? 'tagFilters' : 'entityFilters'; }, bindEvents: function() {}, @@ -312,70 +311,82 @@ define(['require', onRender: function() { var that = this, filters = [], - isGroupView = false, + isGroupView = true, 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 type = that.tag ? 'Classification' : 'Entity'; - var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, 'Select ' + type + ' Attribute'); - if (returnObj) { - filters.push(returnObj); - } - }); - var sortMap = { - "__guid": 1, - "__typeName": 2, - "__timestamp": 3, - "__modificationTimestamp": 4, - "__createdBy": 5, - "__modifiedBy": 6, - "__isIncomplete": 7, - "__state": 8, - "__classificationNames": 9, - "__propagatedClassificationNames": 10, - "__labels": 11, - "__customAttributes": 12, - } - this.systemAttrArr = _.sortBy(this.systemAttrArr, function(obj) { - return sortMap[obj.name] - }) - _.each(this.systemAttrArr, function(obj) { - var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, 'Select System Attribute', true); - if (returnObj) { - filters.push(returnObj); + var rules_widgets = null; + if (this.adminAttrFilters) { + filters = this.adminAttrFilters; + rules_widgets = CommonViewFunction.attributeFilter.extractUrl({ "value": this.searchTableFilters ? this.searchTableFilters["adminAttrFilters"] : null, "formatDate": true });; + } else { + if (this.value) { + var rules_widgets = CommonViewFunction.attributeFilter.extractUrl({ "value": this.searchTableFilters[this.filterType][(this.tag ? this.value.tag : this.value.type)], "formatDate": true }); } - }); - if (this.type) { - var entityDef = this.entityDefCollection.fullCollection.find({ name: that.options.applicableType }), - businessMetadataAttributeDefs = null; - if (entityDef) { - BusinessMetadataAttributeDefs = entityDef.get("businessAttributeDefs"); + _.each(this.attrObj, function(obj) { + var type = that.tag ? that.value.tag : that.value.type; + var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, (type + ' Attribute')); + if (returnObj) { + filters.push(returnObj); + } + }); + var sortMap = { + "__guid": 1, + "__typeName": 2, + "__timestamp": 3, + "__modificationTimestamp": 4, + "__createdBy": 5, + "__modifiedBy": 6, + "__isIncomplete": 7, + "__state": 8, + "__classificationNames": 9, + "__propagatedClassificationNames": 10, + "__labels": 11, + "__customAttributes": 12, } - if (BusinessMetadataAttributeDefs) { - _.each(BusinessMetadataAttributeDefs, function(attributes, key) { - var sortedAttributes = _.sortBy(attributes, function(obj) { - return obj.name; - }); + this.systemAttrArr = _.sortBy(this.systemAttrArr, function(obj) { + return sortMap[obj.name] + }) + _.each(this.systemAttrArr, function(obj) { + var returnObj = that.getObjDef(obj, rules_widgets, isGroupView, 'System Attribute', true); + if (returnObj) { + filters.push(returnObj); + } + }); + if (this.type) { + var pushBusinessMetadataFilter = function(sortedAttributes, businessMetadataKey) { _.each(sortedAttributes, function(attrDetails) { - var returnObj = that.getObjDef(attrDetails, rules_widgets, isGroupView, 'Select Business Metadata Attribute', true); + var returnObj = that.getObjDef(attrDetails, rules_widgets, isGroupView, 'Business Metadata Attribute', true); if (returnObj) { - returnObj.id = key + "." + returnObj.id; - returnObj.label = key + ": " + returnObj.label; + returnObj.id = businessMetadataKey + "." + returnObj.id; + returnObj.label = businessMetadataKey + ": " + returnObj.label; returnObj.data = { 'entityType': "businessMetadata" }; filters.push(returnObj); } }); - }); + }; + if (this.value.type == "_ALL_ENTITY_TYPES") { + this.businessMetadataDefCollection.each(function(model) { + var sortedAttributes = model.get('attributeDefs'); + sortedAttributes = _.sortBy(sortedAttributes, function(obj) { + return obj.name; + }); + pushBusinessMetadataFilter(sortedAttributes, model.get('name')); + }) + + } else { + var entityDef = this.entityDefCollection.fullCollection.find({ name: this.value.type }), + businessMetadataAttributeDefs = null; + if (entityDef) { + businessMetadataAttributeDefs = entityDef.get("businessAttributeDefs"); + } + if (businessMetadataAttributeDefs) { + _.each(businessMetadataAttributeDefs, function(attributes, key) { + var sortedAttributes = _.sortBy(attributes, function(obj) { + return obj.name; + }); + pushBusinessMetadataFilter(sortedAttributes, key); + }); + } + } } } filters = _.uniq(filters, 'id');