Return-Path: X-Original-To: apmail-argus-commits-archive@minotaur.apache.org Delivered-To: apmail-argus-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5D21A110CC for ; Thu, 14 Aug 2014 20:51:07 +0000 (UTC) Received: (qmail 57327 invoked by uid 500); 14 Aug 2014 20:51:07 -0000 Delivered-To: apmail-argus-commits-archive@argus.apache.org Received: (qmail 57307 invoked by uid 500); 14 Aug 2014 20:51:07 -0000 Mailing-List: contact commits-help@argus.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@argus.incubator.apache.org Delivered-To: mailing list commits@argus.incubator.apache.org Received: (qmail 57291 invoked by uid 99); 14 Aug 2014 20:51:07 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 Aug 2014 20:51:07 +0000 X-ASF-Spam-Status: No, hits=-2000.7 required=5.0 tests=ALL_TRUSTED,RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Thu, 14 Aug 2014 20:50:33 +0000 Received: (qmail 54358 invoked by uid 99); 14 Aug 2014 20:50:12 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 Aug 2014 20:50:12 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 522329C3C50; Thu, 14 Aug 2014 20:50:12 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: omalley@apache.org To: commits@argus.incubator.apache.org Date: Thu, 14 Aug 2014 20:50:20 -0000 Message-Id: <6eb098903b7e4dcdaaac9d33e9ce94d4@git.apache.org> In-Reply-To: <47b7a63a01074d478d3dfdfaf220eadb@git.apache.org> References: <47b7a63a01074d478d3dfdfaf220eadb@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [09/44] ARGUS-1. Initial code commit (Selvamohan Neethiraj via omalley) X-Virus-Checked: Checked by ClamAV on apache.org http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/hbase/HbaseTableLayout.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/hbase/HbaseTableLayout.js b/security-admin/src/main/webapp/scripts/views/hbase/HbaseTableLayout.js new file mode 100644 index 0000000..c1db75c --- /dev/null +++ b/security-admin/src/main/webapp/scripts/views/hbase/HbaseTableLayout.js @@ -0,0 +1,383 @@ +/* + * Copyright (c) 2014 XASecure + * All rights reserved. + * + * This software is the confidential and proprietary information of + * XASecure. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with XASecure. + */ + +define(function(require){ + 'use strict'; + + var Backbone = require('backbone'); + + var XAEnums = require('utils/XAEnums'); + var XALinks = require('modules/XALinks'); + var XAGlobals = require('utils/XAGlobals'); + var SessionMgr = require('mgrs/SessionMgr'); + var XAUtil = require('utils/XAUtils'); + + var VXResource = require('models/VXResource'); + + var XABackgrid = require('views/common/XABackgrid'); + var XATableLayout = require('views/common/XATableLayout'); + var localization = require('utils/XALangSupport'); + var vFolderInfo = require('views/folders/FolderInfo'); + + var HbasetablelayoutTmpl = require('hbs!tmpl/hbase/HbaseTableLayout_tmpl'); + + var HbaseTableLayout = Backbone.Marionette.Layout.extend( + /** @lends HbaseTableLayout */ + { + _viewName : 'HbaseTableLayout', + + template: HbasetablelayoutTmpl, + templateHelpers :function(){ + return { + isSysAdmin :this.isSysAdmin, + assetId : this.assetModel.id, + assetModel : this.assetModel, + version : XAGlobals.version + }; + }, + breadCrumbs : function(){ + if(this.assetModel) + return [XALinks.get('RepositoryManager'),XALinks.get('ManageHbasePolicies',{model : this.assetModel})]; + else + return []; + }, + + /** Layout sub regions */ + regions: { + 'rTableList' :'div[data-id="r_tableList"]', + 'rPolicyDetail' : '#policyDetail' + }, + + /** ui selector cache */ + ui: { + 'btnExport' : 'a[data-js="export"]', + 'btnDeletePolicy' : '[data-name="deletePolicy"]', + 'btnShowMore' : '[data-id="showMore"]', + 'btnShowLess' : '[data-id="showLess"]', + 'visualSearch' : '.visual_search' + }, + + /** ui events hash */ + events: function() { + var events = {}; + //events['change ' + this.ui.input] = 'onInputChange'; + events['click ' + this.ui.btnExport] = 'onExport'; + events['click ' + this.ui.btnDeletePolicy] = 'onDelete'; + events['click ' + this.ui.btnShowMore] = 'onShowMore'; + events['click ' + this.ui.btnShowLess] = 'onShowLess'; + return events; + }, + + /** + * intialize a new HbaseTableLayout Layout + * @constructs + */ + initialize: function(options) { + console.log("initialized a HbaseTableLayout Layout"); + + _.extend(this, _.pick(options, 'assetModel')); + this.collection.extraSearchParams = { + //resourceType : XAEnums.AssetType.ASSET_HBASE.value + assetId : this.assetModel.id + }; + this.bindEvents(); + this.isSysAdmin = SessionMgr.isSystemAdmin(); + }, + + /** all events binding here */ + bindEvents : function(){ + /*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/ + /*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/ + }, + + /** on render callback */ + onRender: function() { + var that = this; + this.initializePlugins(); + this.addVisualSearch(); + this.renderTable(); + }, + renderTable : function(){ + var that = this; + var tableRow = Backgrid.Row.extend({ + events: { + 'click' : 'onClick' + }, + initialize : function(){ + var that = this; + var args = Array.prototype.slice.apply(arguments); + Backgrid.Row.prototype.initialize.apply(this, args); + this.listenTo(this.model, 'model1:highlightBackgridRow', function(){ + that.$el.addClass("alert"); + $("html, body").animate({scrollTop: that.$el.position().top},"linear"); + setTimeout(function () { + that.$el.removeClass("alert"); + }, 1500); + }, this); + }, + onClick: function (e) { + if($(e.toElement).is('.icon-edit,.icon-trash,a,code')) + return; + this.$el.parent('tbody').find('tr').removeClass('tr-active'); + this.$el.toggleClass('tr-active'); + if(that.rPolicyDetail){ + $(that.rPolicyDetail.el).hide(); + $(that.rPolicyDetail.el).html(new vFolderInfo({ + model : this.model + }).render().$el).slideDown(); + + } + } + }); + this.rTableList.show(new XATableLayout({ + columns: this.getColumns(), + collection: this.collection, + includeFilter : false, + gridOpts : { + row: tableRow, + header : XABackgrid, + emptyText : 'No Policies found!' + } + })); + }, + + getColumns : function(){ + var that = this; + var cols = { + policyName : { + cell : "uri", + href: function(model){ + return '#!/hbase/'+model.get('assetId')+'/policy/' + model.id; + }, + label : localization.tt("lbl.policyName"), + editable: false, + sortable : false + }, + tables : { + label : localization.tt("lbl.tableName")+'(s)', + cell :'html', + editable:false, + sortable : false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + return _.isUndefined(rawValue) ? '--': ''+rawValue+''; + } + }) + }, + columnFamilies : { + label : localization.tt("lbl.columnFamilies")+'(s)', + cell :'html', + editable:false, + sortable : false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + return _.isUndefined(rawValue) ? '--': ''+rawValue+''; + } + }) + + }, + columns : { + label : localization.tt("lbl.columnName")+'(s)', + cell :'html', + editable:false, + sortable : false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + return _.isUndefined(rawValue) ? '--': ''+rawValue+''; + } + }) + + }, + permMapList : { + reName : 'groupName', + cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}), + label : localization.tt("lbl.group"), + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + if(!_.isUndefined(rawValue)) + return XAUtil.showGroups(rawValue); + return '--'; + + } + }), + editable : false, + sortable : false + }, + auditList : { + label : localization.tt("lbl.auditLogging"), + cell: "html", + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue, model) { + return model.has('auditList') ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false, + editable : false + }, + /*isEncrypt:{ + label:localization.tt("lbl.encrypted"), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue ,model) { + return model.get('isEncrypt') == XAEnums.BooleanValue.BOOL_TRUE.value ? '' : ''; + //You can use rawValue to custom your html, you can change this value using the name parameter. + } + }), + click : false, + drag : false, + onText : 'ON', + offText : 'OFF', + sortable : false + },*/ + resourceStatus:{ + label:localization.tt('lbl.status'), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + var status; + _.each(_.toArray(XAEnums.BooleanValue),function(m){ + if(parseInt(rawValue) == m.value){ + status = (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false; + } + }); + return status ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false + }, + + permissions : { + cell : "html", + label : localization.tt("lbl.action"), + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue,model) { + return '\ + '; + //You can use rawValue to custom your html, you can change this value using the name parameter. + } + }), + editable:false, + sortable : false + } + + + }; + return this.collection.constructor.getTableCols(cols, this.collection); + }, + + onExport : function(e){ + $(e.currentTarget).attr('href', 'service/assets/policyList/'+this.assetModel.get('name')+'?epoch=0'); + //$(e.currentTarget).attr('href', 'service/assets/hive?epoch=0'); + }, + onDelete :function(e){ + var that = this; + var obj = this.collection.get($(e.currentTarget).data('id')); + var model = new VXResource(obj.attributes); + model.collection = this.collection; + XAUtil.confirmPopup({ + msg :localization.tt('msg.areYouSureWantToDelete'), + //msg :'Are you sure want to delete ?', + callback : function(){ + XAUtil.blockUI(); + model.destroy({ + success: function(model, response) { + XAUtil.blockUI('unblock'); + that.collection.remove(model.get('id')); + /*if(that.rPolicyDetail.currentView) + that.rPolicyDetail.currentView.close();*/ + $(that.rPolicyDetail.el).hide(); + XAUtil.notifySuccess('Success', localization.tt('msg.policyDeleteMsg')); + if(that.collection.length == 0){ + that.renderTable(); + that.collection.fetch(); + } + }, + error: function (model, response, options) { + XAUtil.blockUI('unblock'); + if ( response && response.responseJSON && response.responseJSON.msgDesc){ + XAUtil.notifyError('Error', response.responseJSON.msgDesc); + }else + XAUtil.notifyError('Error', 'Error deleting Policy!'); + console.log("error"); + } + }); + } + }); + }, + onShowMore : function(e){ + var id = $(e.currentTarget).attr('policy-group-id'); + this.rTableList.$el.find('[policy-group-id="'+id+'"]').show(); + $('[data-id="showLess"][policy-group-id="'+id+'"]').show(); + $('[data-id="showMore"][policy-group-id="'+id+'"]').hide(); + }, + onShowLess : function(e){ + var id = $(e.currentTarget).attr('policy-group-id'); + this.rTableList.$el.find('[policy-group-id="'+id+'"]').slice(4).hide(); + $('[data-id="showLess"][policy-group-id="'+id+'"]').hide(); + $('[data-id="showMore"][policy-group-id="'+id+'"]').show(); + }, + /** all post render plugin initialization */ + initializePlugins: function(){ + }, + addVisualSearch : function(){ + var that = this; + var searchOpt = ['Table Name(s)','Column Families(s)','Column Name(s)','Group','Policy Name'];//,'Start Date','End Date','Today']; + var serverAttrName = [{text : "Table Name(s)", label :"tables"},{text : "Column Families(s)", label :"columnFamilies"}, + {text : "Column Name(s)", label :"columns"},{text : "Group", label :"groupName"}, + {text : "Policy Name", label :"policyName"}]; + // {text : 'Start Date',label :'startDate'},{text : 'End Date',label :'endDate'}, + // {text : 'Today',label :'today'}]; + + var pluginAttr = { + placeholder :localization.tt('h.searchForPolicy'), + container : this.ui.visualSearch, + query : '', + callbacks : { + valueMatches :function(facet, searchTerm, callback) { + switch (facet) { + case 'Result': + callback(XAUtil.enumToSelectLabelValuePairs(XAEnums.AuthStatus)); + break; + case 'Login Type': + callback(XAUtil.enumToSelectLabelValuePairs(XAEnums.AuthType)); + break; + /* case 'Start Date' : + setTimeout(function () { XAUtil.displayDatepicker(that.ui.visualSearch, callback); }, 0); + break; + case 'End Date' : + setTimeout(function () { XAUtil.displayDatepicker(that.ui.visualSearch, callback); }, 0); + break; + case 'Today' : + var today = Globalize.format(new Date(),"yyyy/mm/dd"); + callback([today]); + break;*/ + } + + } + } + }; + XAUtil.addVisualSearch(searchOpt,serverAttrName, this.collection,pluginAttr); + }, + + /** on close */ + onClose: function(){ + } + + }); + + return HbaseTableLayout; +}); http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/hdfs/HDFSTableLayout.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/hdfs/HDFSTableLayout.js b/security-admin/src/main/webapp/scripts/views/hdfs/HDFSTableLayout.js new file mode 100644 index 0000000..324114b --- /dev/null +++ b/security-admin/src/main/webapp/scripts/views/hdfs/HDFSTableLayout.js @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2014 XASecure + * All rights reserved. + * + * This software is the confidential and proprietary information of + * XASecure. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with XASecure. + */ + +define(function(require){ + 'use strict'; + + var Backbone = require('backbone'); + var XAEnums = require('utils/XAEnums'); + var XALinks = require('modules/XALinks'); + var XAGlobals = require('utils/XAGlobals'); + var SessionMgr = require('mgrs/SessionMgr'); + var XAUtil = require('utils/XAUtils'); + + var XABackgrid = require('views/common/XABackgrid'); + var XATableLayout = require('views/common/XATableLayout'); + var localization = require('utils/XALangSupport'); + var vFolderInfo = require('views/folders/FolderInfo'); + var HdfstablelayoutTmpl = require('hbs!tmpl/hdfs/HDFSTableLayout_tmpl'); + + require('backgrid-filter'); + require('backgrid-paginator'); + require('bootbox'); + + var HDFSTableLayout = Backbone.Marionette.Layout.extend( + /** @lends HDFSTableLayout */ + { + _viewName : 'HDFSTableLayout', + + template: HdfstablelayoutTmpl, + + templateHelpers : function(){ + return { + isSysAdmin : this.isSysAdmin, + assetId : this.assetModel.id, + assetModel : this.assetModel, + version : XAGlobals.version + }; + }, + + breadCrumbs : function(){ + return [XALinks.get('RepositoryManager'),XALinks.get('ManagePolicies',{model : this.assetModel})]; + }, + + /** Layout sub regions */ + regions: { + 'rTableList' : 'div[data-id="r_hdfstable"]', + 'rFolderInfo' : '#folderDetail' + }, + + // /** ui selector cache */ + ui: { + 'btnExport' : 'a[data-js="export"]', + 'btnDeletePolicy' : '[data-name="deletePolicy"]', + 'btnShowMore' : '[data-id="showMore"]', + 'btnShowLess' : '[data-id="showLess"]', + 'visualSearch' : '.visual_search' + }, + + /** ui events hash */ + events: function() { + var events = {}; + events['click ' + this.ui.btnExport] = 'onExport'; + events['click ' + this.ui.btnDeletePolicy] = 'onDelete'; + events['click ' + this.ui.btnShowMore] = 'onShowMore'; + events['click ' + this.ui.btnShowLess] = 'onShowLess'; + + return events; + }, + + /** + * intialize a new HDFSTableLayout Layout + * @constructs + */ + initialize: function(options) { + console.log("initialized a HDFSTableLayout Layout"); + + _.extend(this, _.pick(options,'assetModel')); + + this.collection.extraSearchParams = { +// resourceType : XAEnums.AssetType.ASSET_HDFS.value, + assetId : this.assetModel.id + }; + this.bindEvents(); + this.isSysAdmin = SessionMgr.isSystemAdmin(); + }, + + /** all events binding here */ + bindEvents : function(){ + //this.listenTo(this.collection, "remove", this.render, this); + /*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/ + /*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/ + //this.listenTo(this.collection, "sync", this.render, this); + // + }, + + /** on render callback */ + onRender: function() { + this.initializePlugins(); + this.addVisualSearch(); + this.renderTable(); + }, + + /** all post render plugin initialization */ + initializePlugins: function(){ + }, + renderTable : function(){ + var that = this; + var TableRow = Backgrid.Row.extend({ + events: { + 'click' : 'onClick' + }, + initialize : function(){ + var that = this; + var args = Array.prototype.slice.apply(arguments); + Backgrid.Row.prototype.initialize.apply(this, args); + this.listenTo(this.model, 'model:highlightBackgridRow', function(){ + that.$el.addClass("alert"); + $("html, body").animate({scrollTop: that.$el.position().top},"linear"); + setTimeout(function () { + that.$el.removeClass("alert"); + }, 1500); + }, this); + + }, + onClick: function (e) { + if($(e.toElement).is('.icon-edit,.icon-trash,a,code')) + return; + this.$el.parent('tbody').find('tr').removeClass('tr-active'); + this.$el.toggleClass('tr-active'); + if(that.rFolderInfo){ + $(that.rFolderInfo.el).hide(); + $(that.rFolderInfo.el).html(new vFolderInfo({ + model : this.model + }).render().$el).slideDown(); + } + } + }); + + this.rTableList.show(new XATableLayout({ + columns: this.getColumns(), + collection: this.collection, + includeFilter : false, + gridOpts : { + row: TableRow, + header : XABackgrid, + emptyText : 'No Policies found!' + }, + filterOpts : { + name: ['name'], + placeholder: localization.tt('plcHldr.searchByResourcePath'), + wait: 150 + } + })); + }, + + getColumns : function(){ + var that = this; + var cols = { + policyName : { + cell : "uri", + href: function(model){ + return '#!/hdfs/'+model.get('assetId')+'/policy/' + model.id; + }, + label : localization.tt("lbl.policyName"), + editable: false, + sortable : false + }, + name : { + cell : "html", + label : localization.tt("lbl.resourcePath"), + editable: false, + sortable : false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + return _.isUndefined(rawValue) ? '--': ''+rawValue+''; + } + }) + }, + isRecursive:{ + label:localization.tt('lbl.includesAllPathsRecursively'), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + var status; + _.each(_.toArray(XAEnums.BooleanValue),function(m){ + if(parseInt(rawValue) == m.value){ + status = (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false; + } + }); + return status ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false + }, + permMapList : { + reName : 'groupName', + cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}), + label : localization.tt("lbl.groups"), + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + if(!_.isUndefined(rawValue)) + return XAUtil.showGroups(rawValue); + else + return '--'; + } + }), + editable : false, + sortable : false + }, + auditList : { + label : localization.tt("lbl.auditLogging"), + cell: "html", + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue, model) { + return model.has('auditList') ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false, + editable : false + }, + /* isEncrypt:{ + label:localization.tt("lbl.encrypted"), + cell :"Switch", + editable:false, + // canHeaderFilter : true, + // headerFilterList :[{label : 'ON',value : 1},{label :'OFF' ,value:2}], + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + var status; + _.each(_.toArray(XAEnums.BooleanValue),function(m){ + if(parseInt(rawValue) == m.value){ + status = (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false; + return ; + } + }); + //You can use rawValue to custom your html, you can change this value using the name parameter. + return status; + } + }), + click : false, + drag : false, + onText : 'ON', + offText : 'OFF', + sortable : false + },*/ + resourceStatus:{ + label:localization.tt('lbl.status'), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + var status; + _.each(_.toArray(XAEnums.BooleanValue),function(m){ + if(parseInt(rawValue) == m.value){ + status = (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false; + } + }); + return status ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false + }, + permissions : { + cell : "html", + label : localization.tt("lbl.action"), + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue,model) { + return '\ + '; + //You can use rawValue to custom your html, you can change this value using the name parameter. + } + }), + editable: false, + sortable : false + + } + + }; + return this.collection.constructor.getTableCols(cols, this.collection); + }, + + onExport : function(e){ + + $(e.currentTarget).attr('href', 'service/assets/policyList/'+this.assetModel.get('name')+'?epoch=0'); + }, + onDelete :function(e){ + var that = this; + var VXResource = require('models/VXResource'); + var obj = this.collection.get($(e.currentTarget).data('id')); + var model = new VXResource(obj.attributes); + model.collection = this.collection; + XAUtil.confirmPopup({ + //msg :localize.tt('msg.confirmDelete'), + msg :'Are you sure want to delete ?', + callback : function(){ + XAUtil.blockUI(); + model.destroy({ + success: function(model, response) { + XAUtil.blockUI('unblock'); + that.collection.remove(model.get('id')); + $(that.rFolderInfo.el).hide(); + XAUtil.notifySuccess('Success', localization.tt('msg.policyDeleteMsg')); + if(that.collection.length == 0){ + that.renderTable(); + that.collection.fetch(); + } + }, + error: function (model, response, options) { + XAUtil.blockUI('unblock'); + if ( response && response.responseJSON && response.responseJSON.msgDesc){ + XAUtil.notifyError('Error', response.responseJSON.msgDesc); + }else + XAUtil.notifyError('Error', 'Error deleting Policy!'); + console.log("error"); + } + }); + } + }); + }, + onShowMore : function(e){ + var id = $(e.currentTarget).attr('policy-group-id'); + this.rTableList.$el.find('[policy-group-id="'+id+'"]').show(); + $('[data-id="showLess"][policy-group-id="'+id+'"]').show(); + $('[data-id="showMore"][policy-group-id="'+id+'"]').hide(); + }, + onShowLess : function(e){ + var id = $(e.currentTarget).attr('policy-group-id'); + this.rTableList.$el.find('[policy-group-id="'+id+'"]').slice(4).hide(); + $('[data-id="showLess"][policy-group-id="'+id+'"]').hide(); + $('[data-id="showMore"][policy-group-id="'+id+'"]').show(); + }, + addVisualSearch : function(){ + var that = this; + var searchOpt = ['Resource Path','Group','Policy Name'];//,'Start Date','End Date','Today']; + var serverAttrName = [{text : "Resource Path", label :"name"}, {text : "Group", label :"groupName"}, + {text : "Policy Name", label :"policyName"}]; + // {text : 'Start Date',label :'startDate'},{text : 'End Date',label :'endDate'}, + // {text : 'Today',label :'today'}]; + + var pluginAttr = { + placeholder :localization.tt('h.searchForPolicy'), + container : this.ui.visualSearch, + query : '', + callbacks : { + valueMatches :function(facet, searchTerm, callback) { + switch (facet) { + case 'Result': + callback(XAUtil.enumToSelectLabelValuePairs(XAEnums.AuthStatus)); + break; + case 'Login Type': + callback(XAUtil.enumToSelectLabelValuePairs(XAEnums.AuthType)); + break; + /*case 'Start Date' : + setTimeout(function () { XAUtil.displayDatepicker(that.ui.visualSearch, callback); }, 0); + break; + case 'End Date' : + setTimeout(function () { XAUtil.displayDatepicker(that.ui.visualSearch, callback); }, 0); + break; + case 'Today' : + var today = Globalize.format(new Date(),"yyyy/mm/dd"); + callback([today]); + break;*/ + } + + } + } + }; + window.vs = XAUtil.addVisualSearch(searchOpt,serverAttrName, this.collection,pluginAttr); + }, + /** on close */ + onClose: function(){ + } + + }); + + return HDFSTableLayout; +}); http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/hive/HivePolicyCreate.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/hive/HivePolicyCreate.js b/security-admin/src/main/webapp/scripts/views/hive/HivePolicyCreate.js new file mode 100644 index 0000000..4ddd932 --- /dev/null +++ b/security-admin/src/main/webapp/scripts/views/hive/HivePolicyCreate.js @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2014 XASecure + * All rights reserved. + * + * This software is the confidential and proprietary information of + * XASecure. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with XASecure. + */ + +define(function(require){ + 'use strict'; + + var App = require('App'); + var Backbone = require('backbone'); + var XALinks = require('modules/XALinks'); + + var XAUtil = require('utils/XAUtils'); + var XAEnums = require('utils/XAEnums'); + var localization = require('utils/XALangSupport'); + var VXResourceList = require('collections/VXResourceList'); + + var HivePolicyForm = require('views/hive/HivePolicyForm'); + var HivepolicycreateTmpl = require('hbs!tmpl/hive/HivePolicyCreate_tmpl'); + + var HivePolicyCreate = Backbone.Marionette.Layout.extend( + /** @lends HivePolicyCreate */ + { + _viewName : 'HivePolicyCreate', + + template: HivepolicycreateTmpl, + templateHelpers : function(){ + return { + editPolicy : this.editPolicy + }; + }, + breadCrumbs :function(){ + if(this.model.isNew()) + return [XALinks.get('RepositoryManager'),XALinks.get('ManageHivePolicies',{model : this.assetModel}),XALinks.get('PolicyCreate')]; + else + return [XALinks.get('RepositoryManager'),XALinks.get('ManageHivePolicies',{model : this.assetModel}),XALinks.get('PolicyEdit')]; + } , + /** Layout sub regions */ + regions: { + 'rForm' :'div[data-id="r_form"]' + }, + + /** ui selector cache */ + ui: { + 'btnSave' : '[data-id="save"]', + 'btnCancel' : '[data-id="cancel"]', + 'btnDelete' : '[data-id="delete"]' + }, + + /** ui events hash */ + events: function() { + var events = {}; + events['click ' + this.ui.btnSave] = 'onSave'; + events['click ' + this.ui.btnCancel] = 'onCancel'; + events['click ' + this.ui.btnDelete] = 'onDelete'; + return events; + }, + + /** + * intialize a new HivePolicyCreate Layout + * @constructs + */ + initialize: function(options) { + var that = this; + console.log("initialized a HivePolicyCreate Layout"); + + _.extend(this, _.pick(options,'assetModel')); + this.bindEvents(); + + if(this.model.get('resourceType') == XAEnums.ResourceType.RESOURCE_COLUMN.value) + this.model.set('resourceType',XAEnums.ResourceType.RESOURCE_TABLE.value); + + that.form = new HivePolicyForm({ + template : require('hbs!tmpl/hive/HivePolicyForm_tmpl'), + model : this.model, + assetModel : this.assetModel + }); + + this.editPolicy = this.model.has('id') ? true : false; + }, + + /** all events binding here */ + bindEvents : function(){ + /*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/ + /*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/ + }, + + /** on render callback */ + onRender: function() { + this.rForm.show(this.form); + this.initializePlugins(); + this.rForm.$el.dirtyFields(); + XAUtil.preventNavigation(localization.tt('dialogMsg.preventNavHivePolicyForm'), this.rForm.$el); + }, + + /** all post render plugin initialization */ + initializePlugins: function(){ + }, + popupCallBack : function(msg,validateObj){ + var that = this; + XAUtil.alertPopup({ + msg :msg, + callback : function(){ + // if(validateObj.auditLoggin) + // that.savePolicy(); + } + }); + }, + onSave : function(){ + var that =this, valid = false; + var errors = this.form.commit({validate : false}); + if(! _.isEmpty(errors)){ + return; + } + var validateObj = this.form.formValidation(); + valid = (validateObj.groupSet && validateObj.permSet) || (validateObj.userSet && validateObj.userPerm); + if(!valid){ + + if(validateObj.groupSet && (!validateObj.permSet)){ + this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj); + }else if((!validateObj.groupSet) && (validateObj.permSet)) { + this.popupCallBack(localization.tt('msg.addGroup'),validateObj); + + }else if(validateObj.userSet && (!validateObj.userPerm)){ + this.popupCallBack(localization.tt('msg.addUserPermission'),validateObj); + }else if((!validateObj.userSet) && (validateObj.userPerm)) { + this.popupCallBack(localization.tt('msg.addUser'),validateObj); + + }else if((!validateObj.auditLoggin) && (!validateObj.groupPermSet)){ + XAUtil.alertPopup({ + msg :localization.tt('msg.yourAuditLogginIsOff'), + callback : function(){ + /*if(!that.model.isNew()){ + that.model.destroy({success: function(model, response) { + XAUtil.notifySuccess('Success', localization.tt('msg.policyDeleteMsg')); + App.appRouter.navigate("#!/hive/"+that.assetModel.id+"/policies",{trigger: true}); + }}); + }else{ + XAUtil.notifyError('Error', localization.tt('msg.policyNotAddedMsg')); + App.appRouter.navigate("#!/hive/"+that.assetModel.id+"/policies",{trigger: true}); + }*/ + } + }); + }else{ + this.savePolicy(); + } + }else{ + if(validateObj.groupSet && (!validateObj.permSet)){ + this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj); + }else if((!validateObj.groupSet) && (validateObj.permSet)) { + this.popupCallBack(localization.tt('msg.addGroup'),validateObj); + + }else if(validateObj.userSet && (!validateObj.userPerm)){ + this.popupCallBack(localization.tt('msg.addUserPermission'),validateObj); + }else if((!validateObj.userSet) && (validateObj.userPerm)) { + this.popupCallBack(localization.tt('msg.addUser'),validateObj); + }else + this.savePolicy(); + } + + }, + savePolicy : function(){ + var that = this; + this.form.afterCommit(); + this.saveMethod(); + }, + saveMethod : function(){ + var that = this; + XAUtil.blockUI(); + this.model.save({},{ + wait: true, + success: function () { + XAUtil.blockUI('unblock'); + var msg = that.editPolicy ? 'Policy updated successfully' :'Policy created successfully'; + XAUtil.notifySuccess('Success', msg); + XAUtil.allowNavigation(); + if(that.editPolicy){ + App.appRouter.navigate("#!/hive/"+that.assetModel.id+"/policies",{trigger: true}); + return; + } + + App.appRouter.navigate("#!/hive/"+that.assetModel.id+"/policies",{trigger: false}); + + var view = require('views/hive/HiveTableLayout'); + var resourceListForAsset = new VXResourceList([],{ + queryParams : { + 'assetId' : that.assetModel.id + } + }); + + resourceListForAsset.fetch({ + cache : false, + data : { + // 'resourceType':XAEnums.AssetType.ASSET_HIVE.value, + 'assetId' :that.assetModel.id + } + }).done(function(){ + var newColl = resourceListForAsset; + resourceListForAsset.getLastPage({ + cache : false, + data : { + // 'resourceType':XAEnums.AssetType.ASSET_HIVE.value, + 'assetId' :that.assetModel.id + } + }).done(function(){ + var model = newColl.get(that.model.id); + if(model){ + model.trigger("model1:highlightBackgridRow"); + } + }); + App.rContent.show(new view({ + collection : resourceListForAsset, + assetModel : that.assetModel + })); + + }); + + console.log("success"); + }, + error: function (model, response, options) { + XAUtil.blockUI('unblock'); + if ( response && response.responseJSON && response.responseJSON.msgDesc){ + if( response.responseJSON.messageList && response.responseJSON.messageList.length > 0 && !_.isUndefined(response.responseJSON.messageList[0].fieldName)){ + if(response.responseJSON.messageList[0].fieldName == "parentPermission"){ + XAUtil.confirmPopup({ + msg :response.responseJSON.msgDesc, + callback : function(){ + that.model.set('checkParentPermission',XAEnums.BooleanValue.BOOL_FALSE.value); + that.saveMethod(); + } + }); + }else + XAUtil.notifyError('Error', response.responseJSON.msgDesc); + }else + XAUtil.notifyError('Error', response.responseJSON.msgDesc); + }else + XAUtil.notifyError('Error', 'Error creating Policy!'); + console.log("error"); + } + }); + }, + onDelete :function(){ + var that = this; + XAUtil.confirmPopup({ + //msg :localize.tt('msg.confirmDelete'), + msg :'Are you sure want to delete ?', + callback : function(){ + XAUtil.blockUI(); + that.model.destroy({ + success: function(model, response) { + XAUtil.blockUI('unblock'); + XAUtil.allowNavigation(); + XAUtil.notifySuccess('Success', localization.tt('msg.policyDeleteMsg')); + App.appRouter.navigate("#!/hive/"+that.assetModel.id+"/policies",{trigger: true}); + }, + error: function (model, response, options) { + XAUtil.blockUI('unblock'); + if ( response && response.responseJSON && response.responseJSON.msgDesc){ + XAUtil.notifyError('Error', response.responseJSON.msgDesc); + }else + XAUtil.notifyError('Error', 'Error deleting Policy!'); + console.log("error"); + } + }); + } + }); + }, + onCancel : function(){ + XAUtil.allowNavigation(); + App.appRouter.navigate("#!/hive/"+this.assetModel.id+"/policies",{trigger: true}); + }, + + /** on close */ + onClose: function(){ + XAUtil.allowNavigation(); + } + + }); + + return HivePolicyCreate; +}); http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/hive/HivePolicyForm.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/hive/HivePolicyForm.js b/security-admin/src/main/webapp/scripts/views/hive/HivePolicyForm.js new file mode 100644 index 0000000..2d5074e --- /dev/null +++ b/security-admin/src/main/webapp/scripts/views/hive/HivePolicyForm.js @@ -0,0 +1,734 @@ +/* + * Copyright (c) 2014 XASecure + * All rights reserved. + * + * This software is the confidential and proprietary information of + * XASecure. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with XASecure. + */ + +define(function(require){ + 'use strict'; + + var Backbone = require('backbone'); + + var XAEnums = require('utils/XAEnums'); + var localization = require('utils/XALangSupport'); + var XAUtil = require('utils/XAUtils'); + + var VXPermMapList = require('collections/VXPermMapList'); + var VXGroupList = require('collections/VXGroupList'); + var VXAuditMapList = require('collections/VXAuditMapList'); + var VXAuditMap = require('models/VXAuditMap'); + var VXPermMap = require('models/VXPermMap'); + var VXUserList = require('collections/VXUserList'); + var FormInputItemList = require('views/common/FormInputItemList'); + var UserPermissionList = require('views/common/UserPermissionList'); + + + + require('Backbone.BootstrapModal'); + require('backbone-forms.list'); + require('backbone-forms.templates'); + require('backbone-forms'); + + var HivePolicyForm = Backbone.Form.extend( + /** @lends PolicyForm */ + { + _viewName : 'PolicyForm', + + type : { + DATABASE : 1, + TABLE : 2, + COLUMN : 3, + VIEW : 4, + UDF : 5 + }, + + /** + * intialize a new PolicyForm Form View + * @constructs + */ + initialize: function(options) { + console.log("initialized a PolicyForm Form View"); + Backbone.Form.prototype.initialize.call(this, options); + + _.extend(this, _.pick(options, 'assetModel')); + this.initializeCollection(); + this.bindEvents(); + }, + + /** all events binding here */ + bindEvents : function(){ + this.on('_vAuditListToggle:change', function(form, fieldEditor){ + this.evAuditChange(form, fieldEditor); + }); + this.on('resourceType:change', function(form, fieldEditor){ + this.evResourceTypeChange(form, fieldEditor); + }); + this.on('resourceStatus:change', function(form, fieldEditor){ + this.evResourceStatusChange(form, fieldEditor); + }); + this.on('isTableInclude:change', function(form, fieldEditor){ + this.isTableInclude(form, fieldEditor); + }); + this.on('isColumnInclude:change', function(form, fieldEditor){ + this.isColumnInclude(form, fieldEditor); + }); + }, + initializeCollection: function(){ + this.permMapList = this.model.isNew() ? new VXPermMapList() : this.model.get('permMapList'); + this.auditList = this.model.isNew() ? new VXAuditMapList() : this.model.get('auditList'); + + + /*If the model passed to the fn is new return an empty collection + * otherwise return a collection that has models like + * { + * groupId : 5, + * permissionList : [4,3] + * } + * The formInputList will be passed to the forminputitemlist view. + */ + + this.formInputList = XAUtil.makeCollForGroupPermission(this.model); + this.userPermInputList = XAUtil.makeCollForUserPermission(this.model); + + }, + /** fields for the form + */ + // fields: ['name', 'description', '_vAuditListToggle', 'isEncrypt','isRecursive'], + schema :function(){ + var that = this; + //var plugginAttr = this.getPlugginAttr(true); + + return { + policyName : { + type : 'Text', + title : localization.tt("lbl.policyName") , +// validators : [{'type' :'required'}] + editorAttrs :{ maxlength: 255} + }, + databases : { + type : 'Select2Remote', + title : localization.tt("lbl.selectDatabaseName")+' *', + editorAttrs :{'data-placeholder': 'Select Databases'}, + validators : ['required'],//,{type:'regexp',regexp:/^[a-zA-Z*?][a-zA-Z0-9_'&-/\$]*[A-Za-z0-9]*$/i,message :localization.tt('validationMessages.enterValidName')}], + pluginAttr : this.getPlugginAttr(true,this.type.DATABASE), + options : function(callback, editor){ + callback(); + }, + onFocusOpen : true + + + }, + resourceType : { + type : 'Select', + title : 'Select Permission for [Tables|Views|UDF]', + // validators : ['required'], + editorAttrs :{disabled :'true','placeholder': 'Select Tables', 'class':'btn dropdown-toggle', + 'style': 'width: 89px;height: 29px;font-family: Tahoma;font-size: 14px;border-radius: 10px;border: 2px #cccccc solid;'}, + options : function(callback, editor){ + var permFor =['RESOURCE_TABLE','RESOURCE_UDF']; + var temp = _.filter(XAEnums.ResourceType,function(val,key){ + if(_.contains(permFor,key)) + return true; + }); + temp = _.sortBy(XAUtil.enumToSelectPairs(temp), function(n){ return !n.val; }); + callback(temp); + } + + }, + tables : { + type : 'Select2Remote', + title : localization.tt("lbl.permForTable"), + editorAttrs :{'data-placeholder': 'Select Tables', disabled :'disabled'}, + // fieldAttrs :{'style' :'visibility:hidden'}, + //validators : [{type:'regexp',regexp:/^[a-zA-Z*?][a-zA-Z0-9_'&-/\$]*[A-Za-z0-9]*$/i,message :localization.tt('validationMessages.enterValidName')}], + pluginAttr : this.getPlugginAttr(true,this.type.TABLE), + options : function(callback, editor){ + callback(); + } + }, + isTableInclude : { + type : 'Switch', + switchOn : true, + onText : 'include', + offText : 'exclude', + width : 89, + height : 22 + //fieldAttrs : {style : 'display:none;'} + }, + udfs : { + type : 'Text', + title : localization.tt("lbl.permForUdf"), + editorAttrs :{'placeholder': 'Enter UDF Name'} + // fieldAttrs :{'style' :'visibility:hidden'}, + //validators : [{type:'regexp',regexp:/^[a-zA-Z*?][a-zA-Z0-9_'&-/\$]*[A-Za-z0-9]*$/i,message :localization.tt('validationMessages.enterValidName')}], + /*pluginAttr : this.getPlugginAttr(true,this.type.UDF), + options : function(callback, editor){ + callback(); + },*/ + }, + columns : { + type : 'Select2Remote', + title : localization.tt("lbl.selectColumnName"), + //validators : [{type:'regexp',regexp:/^[a-zA-Z*?][a-zA-Z0-9_'&-/\$]*[A-Za-z0-9]*$/i,message :localization.tt('validationMessages.enterValidName')}], + editorAttrs :{'data-placeholder': 'Select Columns','disabled' :'disabled'}, + //fieldAttrs :{'disabled' :'disabled',}, + pluginAttr : this.getPlugginAttr(true,this.type.COLUMN) + }, + isColumnInclude : { + type : 'Switch', + switchOn : true, + onText : 'include', + offText : 'exclude', + width : 89, + height : 22 + + //fieldAttrs : {style : 'display:none;'} + }, + _vAuditListToggle : { + type : 'Switch', + title : localization.tt("lbl.auditLogging"), + listType : 'VNameValue', + switchOn : true + }, + isEncrypt : { + type : 'Switch', + title : localization.tt("lbl.encrypted"), + switchOn : false, + fieldAttrs : {style : 'display:none;'} + }, + permMapList : { + getValue : function(){ + console.log(this); + } + }, + resourceStatus : { + type : 'Switch', + title : localization.tt("lbl.policyStatus"), + onText : 'enabled', + offText : 'disabled', + width : 89, + height : 22, + switchOn : true + }, + description : { + type : 'TextArea', + title : localization.tt("lbl.description"), + // validators : [/^[A-Za-z ,.'-]+$/i], + template :_.template('
') + } + }; + }, + + evAuditChange : function(form, fieldEditor){ + XAUtil.checkDirtyFieldForToggle(fieldEditor); + if(fieldEditor.getValue() == 1){ + this.model.set('auditList', new VXAuditMapList(new VXAuditMap({ + 'auditType' : XAEnums.XAAuditType.XA_AUDIT_TYPE_ALL.value,//fieldEditor.getValue()// + 'resourceId' :this.model.get('id') + + }))); + } else { + var validation = this.formValidation(); + if(validation.groupPermSet || validation.isUsers) + this.model.unset('auditList'); + else{ + XAUtil.alertPopup({ + msg :localization.tt("msg.policyNotHavingPerm"), + callback : function(){ + fieldEditor.setValue('ON'); + } + }); + } + } + console.log(fieldEditor); + }, + evResourceStatusChange : function(form, fieldEditor){ + XAUtil.checkDirtyFieldForToggle(fieldEditor); + }, + isTableInclude :function(form, fieldEditor){ + if(fieldEditor.getValue() == XAEnums.BooleanValue.BOOL_TRUE.value) + form.fields.tables.editor.$el.siblings('.select2-container').find('ul').removeClass('textFieldWarning'); + else + form.fields.tables.editor.$el.siblings('.select2-container').find('ul').addClass('textFieldWarning'); + }, + isColumnInclude :function(form, fieldEditor){ + if(fieldEditor.getValue() == XAEnums.BooleanValue.BOOL_TRUE.value) + form.fields.columns.editor.$el.siblings('.select2-container').find('ul').removeClass('textFieldWarning'); + else + form.fields.columns.editor.$el.siblings('.select2-container').find('ul').addClass('textFieldWarning'); + }, + evResourceTypeChange : function(form, fieldEditor){ + var that = this; + form.$el.find('[data-editors="tables"]').hide(); + //form.$el.find('[data-fields="views"]').hide(); + form.$el.find('[data-editors="udfs"]').hide(); + form.$el.find('[data-fields="columns"]').hide(); + form.$el.find('[data-editors="isTableInclude"]').hide(); + form.$el.find('[data-editors="isColumnInclude"]').hide(); + this.fields.tables.editor.$el.select2('val',''); + //this.fields.views.editor.$el.select2('val',''); + this.fields.udfs.editor.$el.val(''); + this.fields.columns.editor.$el.select2('val',''); + this.showFields(fieldEditor); + console.log(fieldEditor); + XAUtil.checkDirtyFieldForToggle(fieldEditor); + }, + showFields : function(fieldEditor){ + + if(parseInt(fieldEditor.getValue()) == XAEnums.ResourceType.RESOURCE_TABLE.value){ + this.$el.find('[data-editors="tables"]').show(); + this.$el.find('[data-fields="columns"]').css('display','inline-block'); + this.$el.find('[data-editors="isTableInclude"]').css('display','inline-block'); + this.$el.find('[data-editors="isColumnInclude"]').css('display','inline-block'); + if(!this.fields.resourceType.editor.$el.is(':disabled')) + this.fields.tables.editor.$el.select2('enable',true); + this.fields.tables.editor.$el.val(this.fields.tables.getValue()).trigger('change'); + //this.fields.columns.editor.$el.val(this.fields.columns.getValue()).trigger('change'); + } + if(parseInt(fieldEditor.getValue()) == XAEnums.ResourceType.RESOURCE_UDF.value){ + this.$el.find('[data-editors="tables"]').hide(); + this.$el.find('[data-fields="columns"]').hide(); + this.$el.find('[data-editors="isTableInclude"]').hide(); + this.$el.find('[data-editors="isColumnInclude"]').hide(); + this.$el.find('[data-editors="udfs"]').show(); + if(!this.fields.resourceType.editor.$el.is(':disabled')) + this.fields.udfs.editor.$el.prop('disabled',false); + } + }, + /** on render callback */ + render: function(options) { + Backbone.Form.prototype.render.call(this, options); + + + this.initializePlugins(); + this.renderSelectTagsFields(); + this.renderCustomFields(); + if(!this.model.isNew()) + this.setUpForm(); + else{ + this.fields.resourceType.editor.$el.find('option:first').prop("selected",true); + } + if(this.model.isNew() && this.fields._vAuditListToggle.editor.getValue() == 1){ + this.model.set('auditList', new VXAuditMapList(new VXAuditMap({ + 'auditType' : XAEnums.XAAuditType.XA_AUDIT_TYPE_ALL.value,//fieldEditor.getValue()// + 'resourceId' :this.model.get('id') + + }))); + } + }, + setUpForm : function(){ + var that = this; + this.setUpSwitches(); + if(!_.isEmpty(that.fields.resourceType.getValue()) || !_.isEmpty(this.fields.databases.editor.$el.val())){ + //that.fields.resourceType.editor.$el.val(that.fields.resourceType.getValue()).trigger('change'); + + this.fields.resourceType.editor.$el.prop('disabled',false); + this.showFields(that.fields.resourceType.editor); + } + if(!_.isEmpty(this.fields.databases.editor.$el.val())) + this.fields.tables.editor.$el.prop('disabled',false); + if((!_.isEmpty(this.fields.tables.editor.$el.val()))){ + this.fields.columns.editor.$el.removeAttr('disabled'); + } + if((!_.isEmpty(this.fields.tables.editor.$el.val()))){ + this.fields.tables.editor.$el.siblings('.select2-container').find('ul').addClass('textFieldWarning'); + } + if((!_.isEmpty(this.fields.columns.editor.$el.val()))){ + this.fields.columns.editor.$el.siblings('.select2-container').find('ul').addClass('textFieldWarning'); + } + }, + setUpSwitches :function(){ + var that = this; + var encryptStatus = false,auditStatus = false; + auditStatus = this.model.has('auditList') ? true : false; + this.fields._vAuditListToggle.editor.setValue(auditStatus); + + _.each(_.toArray(XAEnums.BooleanValue),function(m){ + if(parseInt(that.model.get('isEncrypt')) == m.value) + encryptStatus = (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false; + }); + this.fields.isEncrypt.editor.setValue(encryptStatus); + + if(parseInt(this.model.get('tableType')) == XAEnums.PolicyType.POLICY_EXCLUSION.value){ + this.fields.isTableInclude.editor.setValue(false); + } + if(parseInt(this.model.get('columnType')) == XAEnums.PolicyType.POLICY_EXCLUSION.value) + this.fields.isColumnInclude.editor.setValue(false); + + if(parseInt(this.model.get('resourceStatus')) != XAEnums.BooleanValue.BOOL_TRUE.value) + this.fields.resourceStatus.editor.setValue(false); + + + }, + renderSelectTagsFields :function(){ + var that = this; + this.fields.databases.editor.$el.on('change',function(e){ + console.log('change on database Name'); + that.checkMultiselectDirtyField(e, that.type.DATABASE); + if(!_.isEmpty(e.currentTarget.value)){ + that.fields.resourceType.editor.$el.attr('disabled',false); + that.fields.tables.editor.$el.attr('disabled',false); + that.fields.tables.editor.$el.select2('enable',true); + that.fields.udfs.editor.$el.prop('disabled',false); + if((that.fields.tables.editor.$el.select2('val').length ) > 0 ) //|| that.fields.views.editor.$el.select2('val').length + that.fields.columns.editor.$el.select2('enable',true); + } + else{ + that.fields.resourceType.editor.$el.attr('disabled',true); + that.fields.tables.editor.$el.select2('enable',false); + that.fields.udfs.editor.$el.prop('disabled',true); + that.fields.columns.editor.$el.select2('enable',false); + } + + }); + this.fields.tables.editor.$el.on('change',function(e){ + console.log('change on table Name'); + that.checkMultiselectDirtyField(e, that.type.TABLE); + if((!_.isEmpty(e.currentTarget.value))){ + that.fields.columns.editor.$el.select2('enable',true); + + } + else{ + that.fields.columns.editor.$el.select2('enable',false); + } + + }); + this.fields.columns.editor.$el.on('change',function(e){ + console.log('change on Column Name'); + that.checkMultiselectDirtyField(e, that.type.COLUMN); + }); + + }, + getDataParams : function(type, term){ + var dataParams = { + // dataSourceName : 'hadoopdev', + dataSourceName : this.assetModel.get('name') + // databaseName: term, + }; + if (type == this.type.DATABASE && this.fields) { + dataParams.databaseName = term; + } + if (type == this.type.TABLE && this.fields.databases) { + dataParams.databaseName = this.fields.databases.editor.$el.select2('data')[0].text; + dataParams.resourceType = this.fields.resourceType.getValue(); + dataParams.tableName = term; + } + if (type == this.type.COLUMN && this.fields.databases) { + dataParams.databaseName = this.fields.databases.editor.$el.select2('data')[0].text; + dataParams.resourceType = this.fields.resourceType.getValue(); + if(parseInt(this.fields.resourceType.getValue()) == XAEnums.ResourceType.RESOURCE_TABLE.value && this.fields.tables) + dataParams.tableName = this.fields.tables.editor.$el.select2('data')[0].text; + dataParams.columnName = term; + } + return dataParams; + }, + getPlugginAttr :function(autocomplete, searchType){ + var that =this; + var type = searchType; + if(!autocomplete) + return{tags : true,width :'220px',multiple: true,minimumInputLength: 1}; + else { + + + return { + closeOnSelect : true, + //placeholder : 'Select User', + tags:true, + multiple: true, + // minimumInputLength: 1, + width :'220px', + tokenSeparators: [",", " "], + initSelection : function (element, callback) { + var data = []; + $(element.val().split(",")).each(function () { + data.push({id: this, text: this}); + }); + callback(data); + }, + createSearchChoice: function(term, data) { + if ($(data).filter(function() { + return this.text.localeCompare(term) === 0; + }).length === 0) { + return { + id : term, + text: term + }; + } + }, + /*query: function (query) { + var url = "service/assets/hive/resources"; + var data = _.extend(that.getDataParams(type, query.term)); + //var results = [ {id: query.term, path: query.term}]; + + $.get(url, data, function (resp) { + var serverRes = []; + if(resp.resultSize){ + serverRes = resp.vXStrings.map(function(m, i){ return {id : m.text, path: m.text}; }); + } + query.callback({results: serverRes}); + }, 'json'); + + //query.callback({results: results}); + },*/ + + ajax: { + url: "service/assets/hive/resources", + dataType: 'json', + params : { + timeout: 3000 + }, + cache: false, + data: function (term, page) { + return _.extend(that.getDataParams(type, term)); + + }, + results: function (data, page) { + var results = []; + if(data.resultSize != "0"){ + results = data.vXStrings.map(function(m, i){ return {id : m.value, text: m.value}; }); + } + return { + results : results + }; + }, + transport: function (options) { + $.ajax(options).error(function() { + console.log("ajax failed"); + this.success({ + resultSize : 0 + }); + }); + /*$.ajax.error(function(data) { + console.log("ajax failed"); + return { + results : [] + }; + });*/ + + } + + }, + formatResult : function(result){ + return result.text; + }, + formatSelection : function(result){ + return result.text; + }, + formatNoMatches : function(term){ + switch (type){ + case that.type.DATABASE :return localization.tt("msg.enterAlteastOneCharactere"); + case that.type.TABLE :return localization.tt("msg.enterAlteastOneCharactere"); + case that.type.COLUMN :return localization.tt("msg.enterAlteastOneCharactere"); + default : return "No Matches found"; + } + } + }; + } + }, + formValidation : function(){ + var groupSet = false,permSet = false,auditStatus= false,encryptStatus= false,groupPermSet = false, + userSet=false,userPerm = false,isUsers =false; + console.log('validation called..'); + var breakFlag =false; + this.formInputList.each(function(m){ + if(m.has('groupId') || m.has('_vPermList')){ + if(! breakFlag){ + groupSet = m.has('groupId') ? true : false ; + if(!m.has('_vPermList')){ + permSet = false; + }else + permSet = true; + if(groupSet && permSet) + groupPermSet = true; + else + breakFlag=true; + } + } + }); + breakFlag = false; + this.userPermInputList.each(function(m){ + if(! breakFlag){ + userSet = m.has('userId') || m.has('userName') ? true : false ;//|| userSet; + if(!m.has('_vPermList')){ + userPerm = false; + }else + userPerm = true; + if(userSet && userPerm) + isUsers = true; + else + breakFlag=true; + } + }); + auditStatus = this.fields._vAuditListToggle.editor.getValue(); + encryptStatus = this.fields.isEncrypt.editor.getValue(); + var auditLoggin = (auditStatus == XAEnums.BooleanValue.BOOL_TRUE.value) ? true : false; + var encrypted = (encryptStatus == XAEnums.BooleanValue.BOOL_TRUE.value) ? true : false; + + return {groupPermSet: groupPermSet , groupSet : groupSet,permSet : permSet,auditLoggin :auditLoggin,encrypted : encrypted, + userSet : userSet,userPerm:userPerm,isUsers:isUsers}; + }, + /** all custom field rendering */ + renderCustomFields: function(){ + var that = this; + this.groupList = new VXGroupList(); + var params = {sortBy : 'name'}; + this.groupList.setPageSize(100,{fetch:false}); + this.groupList.fetch({ + cache :true, + data : params + }).done(function(){ + that.$('[data-customfields="groupPerms"]').html(new FormInputItemList({ + collection : that.formInputList, + groupList : that.groupList, + model : that.model, + policyType : XAEnums.AssetType.ASSET_HIVE.value + + }).render().el); + }); + + this.userList = new VXUserList(); + var params = {sortBy : 'name'}; + this.userList.setPageSize(100,{fetch:false}); + this.userList.fetch({ + cache :true, + data : params + }).done(function(){ + that.$('[data-customfields="userPerms"]').html(new UserPermissionList({ + collection : that.userPermInputList, + model : that.model, + userList : that.userList, + policyType : XAEnums.AssetType.ASSET_HIVE.value + }).render().el); + }); + }, + afterCommit : function(){ + var that = this; + //TODO FIXME remove the hard coding + //this.model.set('assetId', XAGlobals.hardcoded.HiveAssetId); + this.model.set('assetId', this.assetModel.id); + var permMapList = new VXPermMapList(); + this.formInputList.each(function(m){ + if(!_.isUndefined(m.get('groupId'))){ + var uniqueID = _.uniqueId(new Date()+':'); + _.each(m.get('groupId').split(","),function(groupId){ + _.each(m.get('_vPermList'), function(perm){ + var params = { + //groupId: m.get('groupId'), + groupId: groupId, + permFor : XAEnums.XAPermForType.XA_PERM_FOR_GROUP.value, + permType : perm.permType, + permGroup : uniqueID + }; + //TODO FIXME remove the hardcoding + if(parseInt(groupId) == perm.groupId) + params = $.extend(params, {id : perm.id}); + permMapList.add(new VXPermMap(params)); + }, this); + }); + } + }, this); + + this.userPermInputList.each(function(m){ + if(!_.isUndefined(m.get('userId'))){ + var uniqueID = _.uniqueId(new Date()+':'); + _.each(m.get('userId').split(","),function(userId){ + _.each(m.get('_vPermList'), function(perm){ + var params = { + //groupId: m.get('groupId'), + userId: userId, + permFor : XAEnums.XAPermForType.XA_PERM_FOR_USER.value, + permType : perm.permType, + permGroup : uniqueID + }; + if(parseInt(userId) == perm.userId) + params = $.extend(params, {id : perm.id}); + //TODO FIXME remove the hardcoding + permMapList.add(new VXPermMap(params)); + }, this); + }); + } + }, this); + + this.model.set('permMapList', permMapList); + + var resourceType = this.model.get('resourceType'); + var resourceTypeTable = XAEnums.ResourceType.RESOURCE_TABLE.value == resourceType ? true :false; + var resourceTypeUdf = XAEnums.ResourceType.RESOURCE_UDF.value == resourceType ? true :false; + + var columns = _.isEmpty(this.model.get('columns')) ? true : false; + var perm1 = resourceTypeTable && _.isEmpty(this.model.get('tables')) && columns; + var perm3 = resourceTypeUdf && _.isEmpty(this.model.get('udfs')) ; + + if(_.isEmpty(this.model.get('resourceType'))) + this.model.set('resourceType',XAEnums.ResourceType.RESOURCE_DB.value); + else{ + + if(perm1 || perm3){ //if(perm1 || perm2 || perm3){ + this.model.set('resourceType',XAEnums.ResourceType.RESOURCE_DB.value); + this.model.unset('columns'); + this.model.unset('udfs'); + }else{ + if(columns){ + if(resourceTypeTable) + this.model.set('resourceType',XAEnums.ResourceType.RESOURCE_TABLE.value); + else + this.model.set('resourceType',XAEnums.ResourceType.RESOURCE_UDF.value); + }else{ + + if(resourceTypeTable && !_.isEmpty(this.model.get('tables'))) + this.model.set('resourceType',XAEnums.ResourceType.RESOURCE_COLUMN.value); + else{ + this.model.unset('columns'); + this.model.set('resourceType',XAEnums.ResourceType.RESOURCE_DB.value); + } + } + } + } + + if(this.fields.resourceType.getValue() != XAEnums.ResourceType.RESOURCE_UDF.value){ + if(!_.isEmpty(this.model.get('tables'))){ + if(this.fields.isTableInclude.editor.getValue() == XAEnums.BooleanValue.BOOL_TRUE.value) + this.model.set('tableType',XAEnums.PolicyType.POLICY_INCLUSION.value); + else + this.model.set('tableType',XAEnums.PolicyType.POLICY_EXCLUSION.value); + } + if(!_.isEmpty(this.model.get('columns'))){ + if(this.fields.isColumnInclude.editor.getValue() == XAEnums.BooleanValue.BOOL_TRUE.value) + this.model.set('columnType',XAEnums.PolicyType.POLICY_INCLUSION.value); + else + this.model.set('columnType',XAEnums.PolicyType.POLICY_EXCLUSION.value); + } + } + this.model.unset('isTableInclude'); + this.model.unset('isColumnInclude'); + + if(this.model.get('resourceStatus') != XAEnums.BooleanValue.BOOL_TRUE.value){ + this.model.set('resourceStatus', XAEnums.ActiveStatus.STATUS_DISABLED.value); + } + }, + checkMultiselectDirtyField : function(e, type){ + var elem = $(e.currentTarget),columnName='',nameList = [], newNameList = []; + switch(type){ + case 1 :columnName = 'databases';break; + case 2 :columnName = 'tables';break; + case 3 :columnName = 'columns';break; + } + if(!_.isUndefined(this.model.get(columnName)) && !_.isEqual(this.model.get(columnName),"")) + nameList = this.model.get(columnName).split(','); + if(!_.isEqual(e.currentTarget.value, "")) + newNameList = e.currentTarget.value.split(','); + XAUtil.checkDirtyField(nameList, newNameList, elem); + }, + /** all post render plugin initialization */ + initializePlugins: function(){ + } + + }); + + return HivePolicyForm; +}); http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/hive/HiveTableLayout.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/hive/HiveTableLayout.js b/security-admin/src/main/webapp/scripts/views/hive/HiveTableLayout.js new file mode 100644 index 0000000..d0a635d --- /dev/null +++ b/security-admin/src/main/webapp/scripts/views/hive/HiveTableLayout.js @@ -0,0 +1,452 @@ +/* + * Copyright (c) 2014 XASecure + * All rights reserved. + * + * This software is the confidential and proprietary information of + * XASecure. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with XASecure. + */ + +define(function(require){ + 'use strict'; + + var Backbone = require('backbone'); + var XAEnums = require('utils/XAEnums'); + var XALinks = require('modules/XALinks'); + var XAGlobals = require('utils/XAGlobals'); + var SessionMgr = require('mgrs/SessionMgr'); + var XAUtil = require('utils/XAUtils'); + + var VXResource = require('models/VXResource'); + + var XABackgrid = require('views/common/XABackgrid'); + var XATableLayout = require('views/common/XATableLayout'); + var localization = require('utils/XALangSupport'); + var vFolderInfo = require('views/folders/FolderInfo'); + var HivetablelayoutTmpl = require('hbs!tmpl/hive/HiveTableLayout_tmpl'); + + var HiveTableLayout = Backbone.Marionette.Layout.extend( + /** @lends HiveTableLayout */ + { + _viewName : 'HiveTableLayout', + + template: HivetablelayoutTmpl, + templateHelpers :function(){ + return { + isSysAdmin :this.isSysAdmin, + assetId : this.assetModel.id, + assetModel : this.assetModel, + version : XAGlobals.version + }; + }, + breadCrumbs : function(){ + return [XALinks.get('RepositoryManager'),XALinks.get('ManageHivePolicies',{model : this.assetModel})]; + }, + /** Layout sub regions */ + regions: { + 'rTableList' :'div[data-id="r_tableList"]', + 'rPolicyDetail' : '#policyDetail' + }, + + /** ui selector cache */ + ui: { + 'btnExport' : 'a[data-js="export"]', + 'btnDeletePolicy' : '[data-name="deletePolicy"]', + 'btnShowMore' : '[data-id="showMore"]', + 'btnShowLess' : '[data-id="showLess"]', + 'visualSearch' : '.visual_search' + }, + + /** ui events hash */ + events: function() { + var events = {}; + //events['change ' + this.ui.input] = 'onInputChange'; + events['click ' + this.ui.btnExport] = 'onExport'; + events['click ' + this.ui.btnDeletePolicy] = 'onDelete'; + events['click ' + this.ui.btnShowMore] = 'onShowMore'; + events['click ' + this.ui.btnShowLess] = 'onShowLess'; + return events; + }, + + /** + * intialize a new HiveTableLayout Layout + * @constructs + */ + initialize: function(options) { + console.log("initialized a HiveTableLayout Layout"); + + _.extend(this, _.pick(options, 'assetModel')); + this.collection.extraSearchParams = { + // resourceType : XAEnums.AssetType.ASSET_HIVE.value + assetId : this.assetModel.id + }; + this.bindEvents(); + this.isSysAdmin = SessionMgr.isSystemAdmin(); + }, + + /** all events binding here */ + bindEvents : function(){ + //this.listenTo(this.collection, "remove", this.render, this); + /*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/ + }, + + /** on render callback */ + onRender: function() { + var that = this; + this.initializePlugins(); + this.addVisualSearch(); + this.renderTable(); + }, + + /** all post render plugin initialization */ + initializePlugins: function(){ + }, + renderTable : function(){ + var that = this; + var tableRow = Backgrid.Row.extend({ + events: { + 'click' : 'onClick' + }, + initialize : function(){ + var that = this; + var args = Array.prototype.slice.apply(arguments); + Backgrid.Row.prototype.initialize.apply(this, args); + this.listenTo(this.model, 'model1:highlightBackgridRow', function(){ + that.$el.addClass("alert"); + $("html, body").animate({scrollTop: that.$el.position().top},"linear"); + setTimeout(function () { + that.$el.removeClass("alert"); + }, 1500); + }, this); + }, + onClick: function (e) { + if($(e.toElement).is('.icon-edit,.icon-trash,a,code')) + return; + this.$el.parent('tbody').find('tr').removeClass('tr-active'); + this.$el.toggleClass('tr-active'); + if(that.rPolicyDetail){ + $(that.rPolicyDetail.el).hide(); + $(that.rPolicyDetail.el).html(new vFolderInfo({ + model : this.model + }).render().$el).slideDown(); + } + + } + }); + this.rTableList.show(new XATableLayout({ + columns: this.getColumns(), + collection: this.collection, + includeFilter : false, + gridOpts : { + row: tableRow, + header : XABackgrid, + emptyText : 'No Policies found!' + } + })); + }, + + getColumns : function(){ + var cols = { + policyName : { + cell : "uri", + href: function(model){ + return '#!/hive/'+model.get('assetId')+'/policy/' + model.id; + }, + label : localization.tt("lbl.policyName"), + editable: false, + sortable : false + }, + databases : { + cell :'html', + label : localization.tt("lbl.databaseName")+'(s)', + editable:false, + sortable : false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + return _.isUndefined(rawValue) ? '--': ''+rawValue+''; + } + }) + }, + tables : { + label : localization.tt("lbl.tableName")+'(s)', + cell :'html', + editable:false, + sortable : false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + return _.isUndefined(rawValue) ? '--': ''+rawValue+''; + } + }) + }, + tableType:{ + label:localization.tt('lbl.tableType'), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue, model) { + var isInclude; + if(_.isUndefined(rawValue) || !_.isEmpty(model.get('udfs'))) + return '--'; + _.each(_.toArray(XAEnums.PolicyType),function(m){ + if(parseInt(rawValue) == m.value){ + isInclude = (m.label == XAEnums.PolicyType.POLICY_INCLUSION.label) ? true : false; + } + }); + return isInclude ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false + }, + udfs : { + label : localization.tt("lbl.udfName")+'(s)', + editable:false, + cell :'string', + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { return rawValue ? rawValue : '--';} + }), + sortable : false + }, + columns : { + label : localization.tt("lbl.columnName")+'(s)', + cell :'html', + placeholder : 'Column Name', + editable:false, + sortable : false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + return _.isUndefined(rawValue) ? '--': ''+rawValue+''; + } + }) + + }, + columnType:{ + label:localization.tt('lbl.columnType'), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue, model) { + if(_.isUndefined(rawValue) || !_.isEmpty(model.get('udfs'))) + return '--'; + var isInclude; + _.each(_.toArray(XAEnums.PolicyType),function(m){ + if(parseInt(rawValue) == m.value){ + isInclude = (m.label == XAEnums.PolicyType.POLICY_INCLUSION.label) ? true : false; + } + }); + return isInclude ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false + + }, + permMapList : { + reName : 'groupName', + cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}), + label : localization.tt("lbl.group"), + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + if(!_.isUndefined(rawValue)) + return XAUtil.showGroups(rawValue); + else + return '--'; + } + }), + editable : false, + sortable : false + }, + auditList : { + label : localization.tt("lbl.auditLogging"), + cell: "html", + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue, model) { + return model.has('auditList') ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false, + editable : false + }, + /*isEncrypt:{ + label:localization.tt("lbl.encrypted"), + cell :"Switch", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + var status; + _.each(_.toArray(XAEnums.BooleanValue),function(m){ + if(parseInt(rawValue) == m.value){ + status = (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false; + return ; + } + }); + //You can use rawValue to custom your html, you can change this value using the name parameter. + return status; + } + }), + click : false, + drag : false, + onText : 'ON', + offText : 'OFF', + sortable : false + },*/ + resourceStatus:{ + label:localization.tt('lbl.status'), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + var status; + _.each(_.toArray(XAEnums.BooleanValue),function(m){ + if(parseInt(rawValue) == m.value){ + status = (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false; + } + }); + return status ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false + }, +/* policyType:{ + label:localization.tt('lbl.policyType'), + cell :"html", + editable:false, + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue) { + var isInclude; + _.each(_.toArray(XAEnums.PolicyType),function(m){ + if(parseInt(rawValue) == m.value){ + isInclude = (m.label == XAEnums.PolicyType.POLICY_INCLUSION.label) ? true : false; + } + }); + return isInclude ? '' : ''; + } + }), + click : false, + drag : false, + sortable : false + },*/ + permissions : { + cell : "html", + label : localization.tt("lbl.action"), + formatter: _.extend({}, Backgrid.CellFormatter.prototype, { + fromRaw: function (rawValue,model) { + return '\ + '; + //You can use rawValue to custom your html, you can change this value using the name parameter. + } + }), + editable:false, + sortable : false + } + + + }; + return this.collection.constructor.getTableCols(cols, this.collection); + }, + + onExport : function(e){ + $(e.currentTarget).attr('href', 'service/assets/policyList/'+this.assetModel.get('name')+'?epoch=0'); + //$(e.currentTarget).attr('href', 'service/assets/hive?epoch=0'); + }, + onDelete :function(e){ + var that = this; + var obj = this.collection.get($(e.currentTarget).data('id')); + var model = new VXResource(obj.attributes); + model.collection = this.collection; + XAUtil.confirmPopup({ + //msg :localize.tt('msg.confirmDelete'), + msg :'Are you sure want to delete ?', + callback : function(){ + XAUtil.blockUI(); + model.destroy({ + success: function(model, response) { + XAUtil.blockUI('unblock'); + that.collection.remove(model.get('id')); + $(that.rPolicyDetail.el).hide(); + XAUtil.notifySuccess('Success', localization.tt('msg.policyDeleteMsg')); + if(that.collection.length == 0){ + that.renderTable(); + that.collection.fetch(); + } + }, + error: function (model, response, options) { + XAUtil.blockUI('unblock'); + if ( response && response.responseJSON && response.responseJSON.msgDesc){ + XAUtil.notifyError('Error', response.responseJSON.msgDesc); + }else + XAUtil.notifyError('Error', 'Error deleting Policy!'); + console.log("error"); + } + }); + } + }); + }, + onShowMore : function(e){ + var id = $(e.currentTarget).attr('policy-group-id'); + this.rTableList.$el.find('[policy-group-id="'+id+'"]').show(); + $('[data-id="showLess"][policy-group-id="'+id+'"]').show(); + $('[data-id="showMore"][policy-group-id="'+id+'"]').hide(); + }, + onShowLess : function(e){ + var id = $(e.currentTarget).attr('policy-group-id'); + this.rTableList.$el.find('[policy-group-id="'+id+'"]').slice(4).hide(); + $('[data-id="showLess"][policy-group-id="'+id+'"]').hide(); + $('[data-id="showMore"][policy-group-id="'+id+'"]').show(); + }, + addVisualSearch : function(){ + var that = this; + var searchOpt = ['Database Name(s)','Table Name(s)','Column Name(s)','UDF Name(s)','Group','Policy Name'];//,'Start Date','End Date','Today']; + var serverAttrName = [{text : "Database Name(s)", label :"databases"}, {text : "Table Name(s)", label :"tables"}, + {text : "Column Name(s)", label :"columns"}, {text : "UDF Name(s)", label :"udfs"}, + {text : "Group", label :"groupName"},{text : "Policy Name", label :"policyName"}]; + // {text : 'Start Date',label :'startDate'},{text : 'End Date',label :'endDate'}, + // {text : 'Today',label :'today'}]; + + var pluginAttr = { + placeholder :localization.tt('h.searchForPolicy'), + container : this.ui.visualSearch, + query : '', + callbacks : { + valueMatches :function(facet, searchTerm, callback) { + switch (facet) { + case 'Result': + callback(XAUtil.enumToSelectLabelValuePairs(XAEnums.AuthStatus)); + break; + case 'Login Type': + callback(XAUtil.enumToSelectLabelValuePairs(XAEnums.AuthType)); + break; + /* case 'Start Date' : + setTimeout(function () { XAUtil.displayDatepicker(that.ui.visualSearch, callback); }, 0); + break; + case 'End Date' : + setTimeout(function () { XAUtil.displayDatepicker(that.ui.visualSearch, callback); }, 0); + break; + case 'Today' : + var today = Globalize.format(new Date(),"yyyy/mm/dd"); + callback([today]); + break;*/ + } + + } + } + }; + XAUtil.addVisualSearch(searchOpt,serverAttrName, this.collection,pluginAttr); + }, + + /** on close */ + onClose: function(){ + } + + }); + + return HiveTableLayout; +});