ranger-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From omal...@apache.org
Subject [06/44] ARGUS-1. Initial code commit (Selvamohan Neethiraj via omalley)
Date Thu, 14 Aug 2014 20:50:17 GMT
http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
new file mode 100644
index 0000000..a038266
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
@@ -0,0 +1,1240 @@
+/*
+ * 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 XALinks 			= require('modules/XALinks');
+	var XAEnums 			= require('utils/XAEnums');
+	var XAUtil				= require('utils/XAUtils');
+	var XABackgrid			= require('views/common/XABackgrid');
+	var XATableLayout		= require('views/common/XATableLayout');
+	var localization		= require('utils/XALangSupport');
+	
+	var VXResourceList 		= require('collections/VXResourceList');
+	var UseraccesslayoutTmpl= require('hbs!tmpl/reports/UserAccessLayout_tmpl');
+
+	var UserAccessLayout 	= Backbone.Marionette.Layout.extend(
+	/** @lends UserAccessLayout */
+	{
+		_viewName : 'UserAccessLayout',
+
+		template : UseraccesslayoutTmpl,
+		breadCrumbs : [XALinks.get('UserAccessReport')],
+		templateHelpers :function(){
+			return {groupList : this.groupList};
+		},
+
+		/** Layout sub regions */
+		regions : {
+			'rHdfsTableList'	: 'div[data-id="r_hdfsTable"]',
+			'rHiveTableList'	: 'div[data-id="r_hiveTable"]',
+			'rHbaseTableList'	: 'div[data-id="r_hbaseTable"]',
+			'rKnoxTableList'	: 'div[data-id="r_knoxTable"]',
+			'rStormTableList'	: 'div[data-id="r_stormTable"]',
+			'rHdfsTableSpinner' : '[data-id="r_hdfsTableSpinner"]',
+			'rHiveTableSpinner' : '[data-id="r_hiveTableSpinner"]',
+			'rHbaseTableSpinner': '[data-id="r_hbaseTableSpinner"]',
+			'rKnoxTableSpinner' : '[data-id="r_knoxTableSpinner"]',
+			'rStormTableSpinner': '[data-id="r_stormTableSpinner"]'
+			
+		},
+
+		/** ui selector cache */
+		ui : {
+			userGroup 			: '[data-js="selectGroups"]',
+			searchBtn 			: '[data-js="searchBtn"]',
+			userName 			: '[data-js="userName"]',
+			resourceName 		: '[data-js="resourceName"]',
+			policyName 			: '[data-js="policyName"]',
+			gotoHive 			: '[data-js="gotoHive"]',
+			gotoHbase 			: '[data-js="gotoHbase"]',
+			gotoKnox 			: '[data-js="gotoKnox"]',
+			gotoStorm 			: '[data-js="gotoStorm"]',
+			btnShowMore 		: '[data-id="showMore"]',
+			btnShowLess 		: '[data-id="showLess"]',
+			btnShowMoreUsers 	: '[data-id="showMoreUsers"]',
+			btnShowLessUsers 	: '[data-id="showLessUsers"]'
+		},
+
+		/** ui events hash */
+		events : function() {
+			var events = {};
+			//events['change ' + this.ui.input]  = 'onInputChange';
+			events['click ' + this.ui.searchBtn]  = 'onSearch';
+			//events["'change ' "+ this.ui.userName +"','" + this.ui.userGroup+"'"]  = 'onSearch';
+			//events['change ' + this.ui.userName+ ','+this.ui.userGroup+ ',' +this.ui.resourceName] = 'onSearch';
+			events['click .autoText']  = 'autocompleteFilter';
+			
+			//events['keydown ' + this.ui.userGroup]  = 'groupKeyDown';
+			events['click .gotoLink']  = 'gotoTable';
+			events['click ' + this.ui.btnShowMore]  = 'onShowMore';
+			events['click ' + this.ui.btnShowLess]  = 'onShowLess';
+			events['click ' + this.ui.btnShowMoreUsers]  = 'onShowMoreUsers';
+			events['click ' + this.ui.btnShowLessUsers]  = 'onShowLessUsers';
+			return events;
+		},
+
+		/**
+		 * intialize a new UserAccessLayout Layout
+		 * @constructs
+		 */
+		initialize : function(options) {
+			console.log("initialized a UserAccessLayout Layout");
+			_.extend(this, _.pick(options, 'groupList','userList'));
+			
+			var params = [];
+			this.hdfsResourceList = new VXResourceList();
+			this.hiveResourceList = new VXResourceList();
+			this.hbaseResourceList = new VXResourceList();
+			this.knoxResourceList = new VXResourceList();
+			this.stormResourceList = new VXResourceList();
+			this.bindEvents();
+			
+		},		   
+
+		/** all events binding here */
+		bindEvents : function() {
+			/*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/
+			/*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/
+			this.listenTo(this.hiveResourceList, "change:foo", function(){alert();}, this);
+		},
+
+		/** on render callback */
+		setupGroupAutoComplete : function(){
+			//tags : true,
+			/*width :'220px',
+			multiple: true,
+			minimumInputLength: 1,
+			data :this.groupList.map(function(m) {
+				//console.log(m);
+				return {id : m.id,text : m.get('name')};
+			}),*/
+			this.groupArr = this.groupList.map(function(m){
+				return { id : m.id , text : m.get('name')};
+			});
+			var that = this, arr = [];
+			this.ui.userGroup.select2({
+				closeOnSelect : true,
+				placeholder : 'Select Group',
+			//	maximumSelectionSize : 1,
+				width :'220px',
+				tokenSeparators: [",", " "],
+				tags : this.groupArr,
+				initSelection : function (element, callback) {
+					var data = [];
+					console.log(that.groupList);
+					
+					$(element.val().split(",")).each(function () {
+						var obj = _.findWhere(that.groupArr,{id:this});	
+						data.push({id: this, text: obj.text});
+					});
+					callback(data);
+				},
+				ajax: { 
+					url: "service/xusers/groups",
+					dataType: 'json',
+					data: function (term, page) {
+						return {name : term};
+					},
+					results: function (data, page) { 
+						var results = [],selectedVals = [];
+						if(!_.isEmpty(that.ui.userGroup.val()))
+							selectedVals = that.ui.userGroup.val().split(',');
+						if(data.resultSize != "0"){
+								results = data.vXGroups.map(function(m, i){	return {id : (m.id).toString(), text: m.name};	});
+								if(!_.isEmpty(selectedVals))
+									results = XAUtil.filterResultByIds(results, selectedVals);
+								return {results : results};
+						}
+						return {results : results};
+					}
+				},	
+				formatResult : function(result){
+					return result.text;
+				},
+				formatSelection : function(result){
+					return result.text;
+				},
+				formatNoMatches: function(result){
+					return 'No group found.';
+				}
+			}).on('select2-focus', XAUtil.select2Focus);
+		},		
+		setupUserAutoComplete : function(){
+			var that = this;
+			var arr = [];
+			this.userArr = this.userList.map(function(m){
+				return { id : m.id , text : m.get('name')};
+			});
+			this.ui.userName.select2({
+//				multiple: true,
+//				minimumInputLength: 1,
+				closeOnSelect : true,
+				placeholder : 'Select User',
+		//		maximumSelectionSize : 1,
+				width :'220px',
+				tokenSeparators: [",", " "],
+				tags : this.userArr, 
+				initSelection : function (element, callback) {
+					var data = [];
+					$(element.val().split(",")).each(function () {
+						var obj = _.findWhere(that.userArr,{id:this});	
+						data.push({id: this, text: obj.text});
+					});
+					callback(data);
+				},
+				ajax: { 
+					url: "service/xusers/users",
+					dataType: 'json',
+					data: function (term, page) {
+						return {name : term};
+					},
+					results: function (data, page) { 
+						var results = [],selectedVals=[];
+						if(!_.isEmpty(that.ui.userName.select2('val')))
+							selectedVals = that.ui.userName.select2('val');
+						if(data.resultSize != "0"){
+								results = data.vXUsers.map(function(m, i){	return {id : m.id+"", text: m.name};	});
+								if(!_.isEmpty(selectedVals))
+									results = XAUtil.filterResultByIds(results, selectedVals);
+								return {results : results};
+						}
+						return {results : results};
+					}
+				},	
+				formatResult : function(result){
+					return result.text;
+				},
+				formatSelection : function(result){
+					return result.text;
+				},
+				formatNoMatches: function(result){
+					return 'No user found.';
+				}
+					
+			}).on('select2-focus', XAUtil.select2Focus);
+		},
+		getResourceLists: function(params){
+			var that = this;
+			
+			var resourceList = new VXResourceList();
+			if(!_.isUndefined(params)){
+				XAUtil.blockUI();
+				resourceList.setPageSize(200, {fetch : false});
+				resourceList.fetch({
+					data : params,
+					cache : false,
+					success : function(){
+						XAUtil.blockUI('unblock');
+					},
+					error : function(){XAUtil.blockUI('unblock');}
+				}).done(function(){
+					//console.log(resourceList);
+					XAUtil.blockUI('unblock');
+				//console.log(resourceList);
+				XAUtil.blockUI('unblock');
+				var obj = resourceList.groupBy('assetType');
+					var hdfsList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HDFS.value]) ? obj[XAEnums.AssetType.ASSET_HDFS.value] : [];
+					that.hdfsResourceList.reset(hdfsList);
+					var hiveList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HIVE.value]) ? obj[XAEnums.AssetType.ASSET_HIVE.value] :  [];
+					that.hiveResourceList.reset(hiveList);
+					var hbaseList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_HBASE.value]) ? obj[XAEnums.AssetType.ASSET_HBASE.value] : [];
+					that.hbaseResourceList.reset(hbaseList);
+					var knoxList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_KNOX.value]) ? obj[XAEnums.AssetType.ASSET_KNOX.value] : [];
+					that.knoxResourceList.reset(knoxList);
+					var stormList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_STORM.value]) ? obj[XAEnums.AssetType.ASSET_STORM.value] : [];
+					that.stormResourceList.reset(stormList);
+					
+					
+					if(!_.isEmpty(params)){
+						var totalRecords = hdfsList.length + hiveList.length + hbaseList.length + knoxList.length + stormList.length;
+						that.$('[data-js="searchResult"]').html('Total '+totalRecords+' records found.');
+						that.$('[data-js="hdfsSearchResult"]').html(hdfsList.length +' records found.');
+						that.$('[data-js="hiveSearchResult"]').html(hiveList.length  +' records found.');
+						that.$('[data-js="hbaseSearchResult"]').html(hbaseList.length +' records found.');
+						that.$('[data-js="knoxSearchResult"]').html(knoxList.length +' records found.');
+						that.$('[data-js="stormSearchResult"]').html(stormList.length +' records found.');
+					}
+				});			
+			}else{
+				var obj = this.collection.groupBy('assetType');
+				var hdfsList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HDFS.value]) ? obj[XAEnums.AssetType.ASSET_HDFS.value] : [];
+				that.hdfsResourceList.reset(hdfsList);
+				var hiveList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HIVE.value]) ? obj[XAEnums.AssetType.ASSET_HIVE.value] :  [];
+				that.hiveResourceList.reset(hiveList);
+				var hbaseList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_HBASE.value]) ? obj[XAEnums.AssetType.ASSET_HBASE.value] : [];
+				that.hbaseResourceList.reset(hbaseList);
+				var knoxList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_KNOX.value]) ? obj[XAEnums.AssetType.ASSET_KNOX.value] : [];
+				that.knoxResourceList.reset(knoxList);
+				var stormList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_STORM.value]) ? obj[XAEnums.AssetType.ASSET_STORM.value] : [];
+				that.stormResourceList.reset(stormList);
+			}
+				
+		},
+		onRender : function() {
+			this.initializePlugins();
+			this.setupGroupAutoComplete();
+			this.getResourceLists();
+			this.renderHdfsTable();
+			this.renderHiveTable();
+			this.renderHbaseTable();
+			this.renderKnoxTable();
+			this.renderStormTable();
+			//this.listenTo(this.hiveResourceList, "reset", function(){alert();}, this);
+		},
+		renderHdfsTable : function(){
+			var that = this;
+
+			this.rHdfsTableList.show(new XATableLayout({
+				columns: this.getHdfsColumns(),
+				collection: this.hdfsResourceList,
+				includeFilter : false,
+				includePagination : false,
+				gridOpts : {
+					row : 	Backgrid.Row.extend({}),
+					header : XABackgrid,
+					emptyText : 'No Policies found!'
+				}
+				/*filterOpts : {
+				  name: ['name'],
+				  placeholder: localization.tt('plcHldr.searchByResourcePath'),
+				  wait: 150
+				}*/
+			}));
+		
+		},
+		renderHiveTable : function(){
+			var that = this;
+
+			this.rHiveTableList.show(new XATableLayout({
+				columns: this.getHiveColumns(),
+				collection: this.hiveResourceList,
+				includeFilter : false,
+				includePagination : false,
+				gridOpts : {
+					//row: TableRow,
+					header : XABackgrid,
+					emptyText : 'No Policies found!'
+				}
+				/*filterOpts : {
+				  name: ['name'],
+				  placeholder: localization.tt('plcHldr.searchByResourcePath'),
+				  wait: 150
+				}*/
+			}));
+		
+		},
+		renderHbaseTable : function(){
+			var that = this;
+
+			this.rHbaseTableList.show(new XATableLayout({
+				columns: this.getHbaseColumns(),
+				collection: this.hbaseResourceList,
+				includeFilter : false,
+				includePagination : false,
+				gridOpts : {
+					//row: TableRow,
+					header : XABackgrid,
+					emptyText : 'No Policies found!'
+				}
+				/*filterOpts : {
+				  name: ['name'],
+				  placeholder: localization.tt('plcHldr.searchByResourcePath'),
+				  wait: 150
+				}*/
+			}));
+		
+		},
+		renderKnoxTable : function(){
+			var that = this;
+
+			this.rKnoxTableList.show(new XATableLayout({
+				columns: this.getKnoxColumns(),
+				collection: this.knoxResourceList,
+				includeFilter : false,
+				includePagination : false,
+				gridOpts : {
+					//row: TableRow,
+					header : XABackgrid,
+					emptyText : 'No Policies found!'
+				}
+				/*filterOpts : {
+				  name: ['name'],
+				  placeholder: localization.tt('plcHldr.searchByResourcePath'),
+				  wait: 150
+				}*/
+			}));
+		
+		},
+		renderStormTable : function(){
+			var that = this;
+
+			this.rStormTableList.show(new XATableLayout({
+				columns: this.getStormColumns(),
+				collection: this.stormResourceList,
+				includeFilter : false,
+				includePagination : false,
+				gridOpts : {
+					//row: TableRow,
+					header : XABackgrid,
+					emptyText : 'No Policies found!'
+				}
+				/*filterOpts : {
+				  name: ['name'],
+				  placeholder: localization.tt('plcHldr.searchByResourcePath'),
+				  wait: 150
+				}*/
+			}));
+		
+		},
+		getHdfsColumns : 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) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+				},
+				assetName : {
+					label : localization.tt("lbl.repository"),
+					cell: "String",
+					click : false,
+					drag : false,
+					editable:false,
+					sortable: false
+				},
+				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 ? "Yes" : "No";
+							return status  ? '<label class="label label-success">YES</label>' : '<label class="label label">NO</label>';
+						}
+					}),
+					click : false,
+					drag : false,
+					sortable: false
+				},
+				auditList : {
+					label : localization.tt("lbl.auditLogging"),
+					cell: "html",
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue, model) {
+							//return model.has('auditList') ? 'On' : 'Off';
+							return model.has('auditList') ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
+						}
+					}),
+					click : false,
+					drag : false,
+					sortable: false,
+					editable:false
+				},
+				permMapListUser : {
+					name : 'permMapList',
+					reName : 'userName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.users"),
+				//	canHeaderSearch : true,
+				//	headerSearchStyle  : 'width:85%;',
+					placeholder : 'User(s)',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							var showMoreLess = false;
+							if(_.isArray(rawValue))
+								rawValue =  new Backbone.Collection(rawValue);
+							if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
+								var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
+									if(m.has('userName'))
+										return m.get('userName') ;
+								})));
+								if(userArr.length > 0)
+									var resourceId =rawValue.models[0].attributes.resourceId; 
+								var newUserArr = _.map(userArr, function(name, i){
+									if(i >=  4)
+										return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
+									else if(i == 3 && userArr.length > 4){
+										showMoreLess = true;
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+									}
+									else
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+								});
+								if(showMoreLess){
+									newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
+											<span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
+								}
+								return newUserArr.length ? newUserArr.join(' ') : '--';
+							}else
+								return '--';
+						}
+					}),
+					editable:false,
+					sortable: false
+				},
+				permMapList : {
+					reName : 'groupName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.groups"),
+				//	canHeaderSearch : true,
+				//	headerSearchStyle  : 'width:85%;',
+					placeholder : 'Group Name',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							return XAUtil.showGroups(rawValue);
+						}
+					}),
+					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'
+				},*/
+				/*permissions : {
+					cell :  "html",
+					label : localization.tt("lbl.action"),
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue,model) {
+							return '<a href="#!/policy/'+model.id+'" class="btn btn-mini "><i class="icon-edit icon-large" /></a>\
+									<a href="javascript:void(0);" data-name ="deletePolicy" data-id="'+model.id+'"  class="btn btn-mini  btn-danger"><i class="icon-trash icon-large" /></a>';
+							//You can use rawValue to custom your html, you can change this value using the name parameter.
+						}
+					}),
+					editable:false,
+
+				},
+			*/
+				
+			};
+			return this.hdfsResourceList.constructor.getTableCols(cols, this.hdfsResourceList);
+		},
+		getHiveColumns : function(){
+			var that = this;
+			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) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+				},
+				tables : {
+					label	: localization.tt("lbl.tableName")+'(s)',
+					cell :'html',
+					editable:false,
+					sortable : false,
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+				},
+				/*views : {
+					label	: localization.tt("lbl.viewName")+'(s)',
+					editable:false,
+					cell :'string',
+					sortable: false,
+					// headerSearchStyle  : 'width:85%;',
+					//headerFilterList :["Student","Teacher","StudentTeacher"],
+					placeholder : 'View Name',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {	return rawValue ? rawValue : '--';}
+					}),
+				},*/
+				udfs : {
+					label	: localization.tt("lbl.udfName")+'(s)',
+					editable:false,
+					cell :'string',
+					sortable: false,
+					// headerSearchStyle  : 'width:85%;',
+					//headerFilterList :["Student","Teacher","StudentTeacher"],
+					placeholder : 'UDF Name',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {	return rawValue ? rawValue : '--';}
+					})
+				},
+				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) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+
+				},
+				assetName : {
+					label : localization.tt("lbl.repository"),
+					cell: "String",
+					click : false,
+					drag : false,
+					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') ? 'On' : 'Off';
+							return model.has('auditList') ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
+						}
+					}),
+					click : false,
+					drag : false,
+					sortable: false,
+					editable:false
+				},
+				permMapListUser : {
+					name : 'permMapList',
+					reName : 'userName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.users"),
+					placeholder : 'User(s)',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							var showMoreLess = false;
+							if(_.isArray(rawValue))
+								rawValue =  new Backbone.Collection(rawValue);
+							if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
+								var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
+									if(m.has('userName'))
+										return m.get('userName') ;
+								})));
+								if(userArr.length > 0)
+									var resourceId =rawValue.models[0].attributes.resourceId; 
+								var newUserArr = _.map(userArr, function(name, i){
+									if(i >=  4)
+										return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
+									else if(i == 3 && userArr.length > 4){
+										showMoreLess = true;
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+									}
+									else
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+								});
+								if(showMoreLess){
+									newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
+											<span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
+								}
+								return newUserArr.length ? newUserArr.join(' ') : '--';
+							}else
+								return '--';
+						}
+					}),
+					editable:false,
+					sortable: false
+				},
+				permMapList : {
+					reName : 'groupName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.group"),
+			//		headerSearchStyle  : 'width:85%;',
+					placeholder : 'Group Name',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							return XAUtil.showGroups(rawValue);
+						}
+					}),
+					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'
+				},*/
+				/*permissions : {
+					cell :"uri",
+					label : localization.tt("lbl.action"),
+					href: function(model){
+						return '#!/hive/policy/' + model.id;
+					},
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							return 'Edit';
+							//You can use rawValue to custom your html, you can change this value using the name parameter.
+						}
+					}),
+				//	klass : 'btn btn-mini btn-blue',
+					editable:false,
+				//	iconKlass :'icon-edit',
+				//	iconTitle :'Edit'
+					
+
+				}*/
+				
+				
+			};
+			return this.hiveResourceList.constructor.getTableCols(cols, this.hiveResourceList);
+		},
+		getHbaseColumns : function(){
+			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) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+				},
+				columnFamilies : {
+					label	: localization.tt("lbl.columnFamilies")+'(s)',
+					cell :'html',
+					editable:false,
+					sortable : false,
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+
+				},
+				assetName : {
+					label : localization.tt("lbl.repository"),
+					cell: "String",
+					click : false,
+					drag : false,
+					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') ? 'On' : 'Off';
+							return model.has('auditList') ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
+						}
+					}),
+					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 ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
+							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,
+					sortable: false,
+					onText : 'ON',
+					offText : 'OFF'
+				},*/
+				permMapListUser : {
+					name : 'permMapList',
+					reName : 'userName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.users"),
+					placeholder : 'User(s)',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							var showMoreLess = false;
+							if(_.isArray(rawValue))
+								rawValue =  new Backbone.Collection(rawValue);
+							if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
+								var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
+									if(m.has('userName'))
+										return m.get('userName') ;
+								})));
+								if(userArr.length > 0)
+									var resourceId =rawValue.models[0].attributes.resourceId; 
+								var newUserArr = _.map(userArr, function(name, i){
+									if(i >=  4)
+										return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
+									else if(i == 3 && userArr.length > 4){
+										showMoreLess = true;
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+									}
+									else
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+								});
+								if(showMoreLess){
+									newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
+											<span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
+								}
+								return newUserArr.length ? newUserArr.join(' ') : '--';
+							}else
+								return '--';
+						}
+					}),
+					editable:false,
+					sortable: false
+				},
+				permMapList : {
+					reName : 'groupName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.group"),
+					canHeaderSearch : false,
+					// headerSearchStyle  : 'width:70%;',
+					placeholder : 'Group Name',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							return XAUtil.showGroups(rawValue);
+						}
+					}),
+					sortable: false,
+					editable:false
+				}
+				
+				
+			};
+			return this.hbaseResourceList.constructor.getTableCols(cols, this.hbaseResourceList);
+		},
+		getKnoxColumns : function(){
+			var cols = {
+				policyName : {
+					cell : "uri",
+					href: function(model){
+						return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
+					},
+					label	: localization.tt("lbl.policyName"),
+					editable: false,
+					sortable : false
+				},	
+				topologies : {
+					label	: localization.tt("lbl.topologyName")+'(s)',
+					/*href: function(model){
+						return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
+					},*/
+					editable:false,
+					cell :'string',
+					sortable : false
+						
+				},
+				services: {
+					label	: localization.tt("lbl.serivceName")+'(s)',
+					editable:false,
+					cell :'string',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {	return rawValue ? rawValue : '--';}
+					}),
+					sortable : false
+				},
+				assetName : {
+					label : localization.tt("lbl.repository"),
+					cell: "String",
+					click : false,
+					drag : false,
+					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') ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
+						}
+					}),
+					click : false,
+					drag : false,
+					sortable : false,
+					editable : false
+				},
+				permMapListUser : {
+					name : 'permMapList',
+					reName : 'userName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.users"),
+					placeholder : 'User(s)',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							var showMoreLess = false;
+							if(_.isArray(rawValue))
+								rawValue =  new Backbone.Collection(rawValue);
+							if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
+								var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
+									if(m.has('userName'))
+										return m.get('userName') ;
+								})));
+								if(userArr.length > 0)
+									var resourceId =rawValue.models[0].attributes.resourceId; 
+								var newUserArr = _.map(userArr, function(name, i){
+									if(i >=  4)
+										return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
+									else if(i == 3 && userArr.length > 4){
+										showMoreLess = true;
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+									}
+									else
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+								});
+								if(showMoreLess){
+									newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
+											<span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
+								}
+								return newUserArr.length ? newUserArr.join(' ') : '--';
+							}else
+								return '--';
+						}
+					}),
+					editable: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
+				},
+			};
+			return this.knoxResourceList.constructor.getTableCols(cols, this.knoxResourceList);
+		},
+		getStormColumns : function(){
+			var cols = {
+				policyName : {
+					cell : "uri",
+					href: function(model){
+						return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
+					},
+					label	: localization.tt("lbl.policyName"),
+					editable: false,
+					sortable : false
+				},	
+				topologies : {
+					label	: localization.tt("lbl.topologyName")+'(s)',
+					/*href: function(model){
+						return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
+					},*/
+					editable:false,
+					cell :'string',
+					sortable : false
+						
+				},
+				/*services: {
+					label	: localization.tt("lbl.serivceName")+'(s)',
+					editable:false,
+					cell :'string',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {	return rawValue ? rawValue : '--';}
+					}),
+					sortable : false
+				},*/
+				assetName : {
+					label : localization.tt("lbl.repository"),
+					cell: "String",
+					click : false,
+					drag : false,
+					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') ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
+						}
+					}),
+					click : false,
+					drag : false,
+					sortable : false,
+					editable : false
+				},
+				permMapListUser : {
+					name : 'permMapList',
+					reName : 'userName',
+					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.users"),
+					placeholder : 'User(s)',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							var showMoreLess = false;
+							if(_.isArray(rawValue))
+								rawValue =  new Backbone.Collection(rawValue);
+							if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
+								var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
+									if(m.has('userName'))
+										return m.get('userName') ;
+								})));
+								if(userArr.length > 0)
+									var resourceId =rawValue.models[0].attributes.resourceId; 
+								var newUserArr = _.map(userArr, function(name, i){
+									if(i >=  4)
+										return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
+									else if(i == 3 && userArr.length > 4){
+										showMoreLess = true;
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+									}
+									else
+										return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
+								});
+								if(showMoreLess){
+									newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
+											<span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
+								}
+								return newUserArr.length ? newUserArr.join(' ') : '--';
+							}else
+								return '--';
+						}
+					}),
+					editable: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
+				},
+			};
+			return this.stormResourceList.constructor.getTableCols(cols, this.stormResourceList);
+		},
+		/** all post render plugin initialization */
+		initializePlugins : function() {
+			var that = this;
+			this.$(".wrap-header").each(function() {
+				var wrap = $(this).next();
+				// If next element is a wrap and hasn't .non-collapsible class
+				if (wrap.hasClass('wrap') && ! wrap.hasClass('non-collapsible'))
+					$(this).append('<a href="#" class="wrap-collapse pull-right">hide&nbsp;&nbsp;<i class="icon-caret-up"></i></a>').append('<a href="#" class="wrap-expand pull-right" style="display: none">show&nbsp;&nbsp;<i class="icon-caret-down"></i></a>');
+			});
+			// Collapse wrap
+			$(document).on("click", "a.wrap-collapse", function() {
+				var self = $(this).hide(100, 'linear');
+				self.parent('.wrap-header').next('.wrap').slideUp(500, function() {
+					$('.wrap-expand', self.parent('.wrap-header')).show(100, 'linear');
+				});
+				return false;
+
+				// Expand wrap
+			}).on("click", "a.wrap-expand", function() {
+				var self = $(this).hide(100, 'linear');
+				self.parent('.wrap-header').next('.wrap').slideDown(500, function() {
+					$('.wrap-collapse', self.parent('.wrap-header')).show(100, 'linear');
+				});
+				return false;
+			});
+			
+			this.ui.resourceName.bind( "keydown", function( event ) {
+
+				if ( event.keyCode === $.ui.keyCode.ENTER ) {
+					that.onSearch();
+				}
+			});
+			
+		},
+		onSearch : function(e){
+			var that = this;
+			var groups = (this.ui.userGroup.is(':visible')) ? this.ui.userGroup.select2('val'):undefined;
+			var users = (this.ui.userName.is(':visible')) ? this.ui.userName.select2('val'):undefined;
+			var rxName = this.ui.resourceName.val();
+			var policyName = this.ui.policyName.val();
+			var params = {groupId : groups,userId : users,name : rxName, policyName : policyName};
+			
+			this.getResourceLists(params);
+		},
+		autocompleteFilter	: function(e){
+			var $el = $(e.currentTarget);
+			var $button = $(e.currentTarget).parents('.btn-group').find('button').find('span').first();
+			if($el.data('id')== "grpSel"){
+				$button.text('Group');
+				this.ui.userGroup.show();
+				this.setupGroupAutoComplete();
+				this.ui.userName.select2('destroy');
+				this.ui.userName.val('').hide();
+			}else{
+				this.ui.userGroup.select2('destroy');
+				this.ui.userGroup.val('').hide();
+				this.ui.userName.show();
+				this.setupUserAutoComplete();
+				$button.text('Username');
+			}
+			//this.onSearch();
+		},
+		gotoTable : function(e){
+			var that = this, elem = $(e.currentTarget),pos;
+			var scroll = false;
+			if(elem.attr('data-js') == this.ui.gotoHive.attr('data-js')){
+				if(that.rHiveTableList.$el.parent('.wrap').is(':visible')){
+					pos = that.rHiveTableList.$el.offsetParent().position().top - 100;
+					scroll =true;	
+				}
+			}else if(elem.attr('data-js') == this.ui.gotoHbase.attr('data-js')){
+				if(that.rHbaseTableList.$el.parent('.wrap').is(':visible')){
+					pos = that.rHbaseTableList.$el.offsetParent().position().top - 100;
+					scroll = true;
+				}
+			}else if(elem.attr('data-js') == this.ui.gotoKnox.attr('data-js')){
+				if(that.rKnoxTableList.$el.parent('.wrap').is(':visible')){
+					pos = that.rKnoxTableList.$el.offsetParent().position().top - 100;
+					scroll = true;
+				}
+			}else if(elem.attr('data-js') == this.ui.gotoStorm.attr('data-js')){
+				if(that.rStormTableList.$el.parent('.wrap').is(':visible')){
+					pos = that.rStormTableList.$el.offsetParent().position().top - 100;
+					scroll = true;
+				}
+			}
+			if(scroll){
+				$("html, body").animate({
+					scrollTop : pos
+				}, 1100);
+			}
+		},
+		onShowMore : function(e){
+			var id = $(e.currentTarget).attr('policy-group-id');
+			var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id');
+			$('[data-id="'+elem+'"]').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');
+			var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id')
+			$('[data-id="'+elem+'"]').find('[policy-group-id="'+id+'"]').slice(4).hide();
+			$('[data-id="showLess"][policy-group-id="'+id+'"]').hide();
+			$('[data-id="showMore"][policy-group-id="'+id+'"]').show();
+		},
+		onShowMoreUsers : function(e){
+			var id = $(e.currentTarget).attr('policy-user-id');
+			var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id');
+			$('[data-id="'+elem+'"]').find('[policy-user-id="'+id+'"]').show();
+			$('[data-id="showLessUsers"][policy-user-id="'+id+'"]').show();
+			$('[data-id="showMoreUsers"][policy-user-id="'+id+'"]').hide();
+		},
+		onShowLessUsers : function(e){
+			var id = $(e.currentTarget).attr('policy-user-id');
+			var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id');
+			$('[data-id="'+elem+'"]').find('[policy-user-id="'+id+'"]').slice(4).hide();
+			$('[data-id="showLessUsers"][policy-user-id="'+id+'"]').hide();
+			$('[data-id="showMoreUsers"][policy-user-id="'+id+'"]').show();
+		},
+		/** on close */
+		onClose : function() {
+		}
+	});
+
+	return UserAccessLayout;
+});

http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/storm/StormPolicyCreate.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/storm/StormPolicyCreate.js b/security-admin/src/main/webapp/scripts/views/storm/StormPolicyCreate.js
new file mode 100644
index 0000000..e4615b7
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/storm/StormPolicyCreate.js
@@ -0,0 +1,290 @@
+/*
+ * 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 StormPolicyForm		 = require('views/storm/StormPolicyForm');
+	var StormPolicyCreateTmpl = require('hbs!tmpl/storm/StormPolicyCreate_tmpl');
+
+	var StormPolicyCreate = Backbone.Marionette.Layout.extend(
+	/** @lends StormPolicyCreate */
+	{
+		_viewName : 'StormPolicyCreate',
+		
+    	template: StormPolicyCreateTmpl,
+    	templateHelpers : function(){
+    		return {
+    			editPolicy : this.editPolicy
+    		};
+    	},
+    	breadCrumbs :function(){
+    		if(this.model.isNew())
+    			return [XALinks.get('RepositoryManager'),XALinks.get('ManageKnoxPolicies',{model : this.assetModel}),XALinks.get('PolicyCreate')];
+    		else
+    			return [XALinks.get('RepositoryManager'),XALinks.get('ManageKnoxPolicies',{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 StormPolicyCreate Layout 
+		* @constructs
+		*/
+		initialize: function(options) {
+			var that = this;
+			console.log("initialized a StormPolicyCreate Layout");
+
+			_.extend(this, _.pick(options,'assetModel'));
+			this.bindEvents();
+
+			that.form = new StormPolicyForm({
+					template : require('hbs!tmpl/storm/StormPolicyForm_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.preventNavStormPolicyForm'), 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.groupIPSet) || (validateObj.userSet && validateObj.userPerm && validateObj.userIPSet);
+			if(!valid){
+				if(this.validateGroupPermission(validateObj)) {
+					 if((!validateObj.auditLoggin) && (!validateObj.groupPermSet)){
+						XAUtil.alertPopup({
+							msg :localization.tt('msg.yourAuditLogginIsOff'),
+							callback : function(){}
+						});
+					}else{
+						this.savePolicy();
+					}
+				}
+			}else{
+				if(this.validateGroupPermission(validateObj))
+					this.savePolicy();
+			}
+
+		},
+		validateGroupPermission : function(validateObj){
+			if((!validateObj.groupSet) && (validateObj.permSet)) {
+				this.popupCallBack(localization.tt('msg.addGroup'),validateObj);
+			}else if(validateObj.groupIPSet && (!validateObj.groupSet)){
+					this.popupCallBack(localization.tt('msg.addGroup'),validateObj);
+			/*}else if(validateObj.groupSet && (!validateObj.groupIPSet)){
+				this.popupCallBack(localization.tt('msg.enterIPForGroupPerm'),validateObj);
+			}else if(!validateObj.groupIPSet && (validateObj.groupSet && validateObj.permSet)){
+				this.popupCallBack(localization.tt('msg.enterIPForGroupPerm'),validateObj);*/
+			}else if(validateObj.groupIPSet && (!validateObj.permSet)){
+				this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj);
+			}else if(validateObj.groupSet && (!validateObj.permSet)){
+					this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj);
+			/*}else if(validateObj.groupIPSet && !validateObj.groupSet){
+				this.popupCallBack(localization.tt('msg.addGroup'),validateObj);
+			}else if(validateObj.groupIPSet && !validateObj.permSet){
+				this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj);*/
+			
+			}else if(validateObj.userIPSet && (!validateObj.userSet)){
+				this.popupCallBack(localization.tt('msg.addUser'),validateObj);
+			}else if(validateObj.userPerm && (!validateObj.userSet)) {
+				this.popupCallBack(localization.tt('msg.addUser'),validateObj);
+			/*}else if(!validateObj.userIPSet && validateObj.userSet){
+				this.popupCallBack(localization.tt('msg.enterIPForUserPerm'),validateObj);
+			}else if(!validateObj.userIPSet && (validateObj.userSet && validateObj.userPerm)){
+				this.popupCallBack(localization.tt('msg.enterIPForUserPerm'),validateObj);*/		
+			}else if(validateObj.userIPSet && (!validateObj.userPerm)){
+				this.popupCallBack(localization.tt('msg.addUserPermission'),validateObj);
+			}else if(validateObj.userSet && (!validateObj.userPerm)){
+				this.popupCallBack(localization.tt('msg.addUserPermission'),validateObj);
+			}
+			else
+				return true;
+		},
+		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("#!/storm/"+that.assetModel.id+"/policies",{trigger: true});
+						return;
+					}
+					
+					App.appRouter.navigate("#!/storm/"+that.assetModel.id+"/policies",{trigger: false});
+					
+					var view = require('views/storm/StormTableLayout');
+					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("#!/storm/"+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("#!/storm/"+this.assetModel.id+"/policies",{trigger: true});
+		},
+		
+		/** on close */
+		onClose: function(){
+			XAUtil.allowNavigation();
+		}
+
+	});
+
+	return StormPolicyCreate; 
+});

http://git-wip-us.apache.org/repos/asf/incubator-argus/blob/7defc061/security-admin/src/main/webapp/scripts/views/storm/StormPolicyForm.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/storm/StormPolicyForm.js b/security-admin/src/main/webapp/scripts/views/storm/StormPolicyForm.js
new file mode 100644
index 0000000..6fb171c
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/storm/StormPolicyForm.js
@@ -0,0 +1,499 @@
+/*
+ * 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 : {
+			TOPOLOGY : 1,
+			SERVICE    : 2,
+		},
+
+    	/**
+		* 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('resourceStatus:change', function(form, fieldEditor){
+    			this.evResourceStatusChange(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}
+				},
+				topologies : {
+					type		: 'Select2Remote',
+					title		: localization.tt("lbl.selectTopologyName")+' *',
+					editorAttrs :{'data-placeholder': 'Select Topology'},
+					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.TOPOLOGY),
+	                options    : function(callback, editor){
+	                    callback();
+	                },
+	                onFocusOpen : true
+
+					
+				},
+				/*services : {
+					type		: 'Select2Remote',
+					title		: localization.tt("lbl.selectServiceName"),
+					//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 Service'},//'disabled' :'disabled'},
+					//fieldAttrs :{'disabled' :'disabled',},
+					pluginAttr  : this.getPlugginAttr(true,this.type.SERVICE)
+				},*/
+				_vAuditListToggle : {
+					type		: 'Switch',
+					title		: localization.tt("lbl.auditLogging"),
+					listType	: 'VNameValue',
+					switchOn	: true
+				},
+				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('<div class="altField" data-editor></div>')
+				}
+			};	
+		},
+
+		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);
+		},
+		/** on render callback */
+		render: function(options) {
+			Backbone.Form.prototype.render.call(this, options);
+			this.initializePlugins();
+		//	this.renderSelectTagsFields();
+			this.renderCustomFields();
+			if(!this.model.isNew()){
+				this.setUpSwitches();
+			}
+			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')
+					
+				})));
+			}
+		},
+		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('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.tables.editor.$el.attr('disabled',false);
+				}
+				else{
+					that.fields.udfs.editor.$el.prop('disabled',true);
+				}
+					
+			});
+			this.fields.tables.editor.$el.on('change',function(e){
+				console.log('change on table Name');
+				that.checkMultiselectDirtyField(e, that.type.TABLE);
+					
+			});
+			
+		},
+		getDataParams : function(type, term){
+			var dataParams = {
+				dataSourceName : this.assetModel.get('name')
+			};
+			if (type == this.type.TOPOLOGY && this.fields) {
+				dataParams.topologyName = term;
+			}
+			if (type == this.type.SERVICE && this.fields.topologies) {
+				dataParams.topologyName = this.fields.topologies.editor.$el.select2('data')[0].text;
+				dataParams.serviceName = 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
+							};
+						}
+					},
+					ajax: { 
+						url: "service/assets/knox/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.TOPOLOGY :return localization.tt("msg.enterAlteastOneCharactere");
+							case  that.type.SERVICE :return localization.tt("msg.enterAlteastOneCharactere");
+							default : return "No Matches found";
+						}
+					}
+				};	
+			}
+		},
+		formValidation : function(){
+			var groupSet = false,permSet = false,auditStatus= false,encryptStatus= false,groupPermSet = false, groupIPSet = false,
+							userSet=false,userPerm = false,isUsers =false, userIPSet = false;;
+			console.log('validation called..');
+			var breakFlag =false;
+			this.formInputList.each(function(m){
+				if(m.has('groupId') ||  m.has('_vPermList') || m.has('ipAddress')){
+					if(! breakFlag){
+						groupSet = m.has('groupId') ? true : false ;
+						groupIPSet = m.has('ipAddress') ? 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') ? true : false ;//|| userSet;
+					userIPSet = m.has('ipAddress') ? true : false ;
+					if(!m.has('_vPermList')){
+						userPerm = false;
+					}else
+						userPerm = true;
+					if(userSet && userPerm)
+						isUsers = true;
+					else
+						breakFlag=true;
+				}
+			});
+			auditStatus = this.fields._vAuditListToggle.editor.getValue();
+			if(!_.isUndefined(this.fields.isEncrypt))
+				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,
+					 groupIPSet 	: groupIPSet,
+					 permSet 		: permSet,
+					 auditLoggin 	:auditLoggin,
+					 encrypted 		: encrypted,
+					 userSet 		: userSet,
+					 userPerm		:userPerm,
+					 userIPSet 		:userIPSet ,
+					 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_STORM.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_STORM.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});
+							if(!_.isUndefined(m.get('ipAddress')))
+								params = $.extend(params, {ipAddress : m.get('ipAddress').toString()});
+							
+							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});
+							if(!_.isUndefined(m.get('ipAddress')))
+								params = $.extend(params, {ipAddress : m.get('ipAddress').toString()});
+							//TODO FIXME remove the hardcoding
+							permMapList.add(new VXPermMap(params));
+						}, this);
+					});
+				}
+			}, this);
+			
+			this.model.set('permMapList', permMapList);
+			if(this.model.get('resourceStatus') != XAEnums.BooleanValue.BOOL_TRUE.value){
+				this.model.set('resourceStatus', XAEnums.ActiveStatus.STATUS_DISABLED.value);
+			}
+			
+			var resourceType = _.isEmpty(this.model.get('services')) ? XAEnums.ResourceType.RESOURCE_TOPOLOGY.value : XAEnums.ResourceType.RESOURCE_SERVICE.value ;
+			this.model.set('resourceType',resourceType);
+		},
+		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/storm/StormTableLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/storm/StormTableLayout.js b/security-admin/src/main/webapp/scripts/views/storm/StormTableLayout.js
new file mode 100644
index 0000000..8fb00cd
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/storm/StormTableLayout.js
@@ -0,0 +1,341 @@
+/*
+ * 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 StormTableLayoutTmpl = require('hbs!tmpl/storm/StormTableLayout_tmpl');
+
+	var StormTableLayout = Backbone.Marionette.Layout.extend(
+	/** @lends StormTableLayout */
+	{
+		_viewName : 'StormTableLayout',
+		
+    	template: StormTableLayoutTmpl,
+    	templateHelpers :function(){
+    		return {
+    			isSysAdmin 		:this.isSysAdmin,
+    			assetId		  	: this.assetModel.id,
+    			assetModel 		: this.assetModel,
+    			version 		: XAGlobals.version
+    		};
+    	},
+    	breadCrumbs : function(){
+    		return [XALinks.get('RepositoryManager'),XALinks.get('ManageKnoxPolicies',{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 StormTableLayout Layout 
+		* @constructs
+		*/
+		initialize: function(options) {
+			console.log("initialized a StormTableLayout 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 '#!/storm/'+model.get('assetId')+'/policy/' + model.id;
+					},
+					label	: localization.tt("lbl.policyName"),
+					editable: false,
+					sortable : false
+				},	
+				topologies : {
+					label	: localization.tt("lbl.topologyName")+'(s)',
+					/*href: function(model){
+						return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
+					},*/
+					editable:false,
+//					cell :'uri',
+					cell :'string',
+					sortable : false
+						
+				},
+				/*services: {
+					label	: localization.tt("lbl.serivceName")+'(s)',
+					editable:false,
+					cell :'string',
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {	return rawValue ? rawValue : '--';}
+					}),
+					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') ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
+						}
+					}),
+					click : false,
+					drag : false,
+					sortable : false,
+					editable : 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 ? '<label class="label label-success">Enabled</label>' : '<label class="label label-important">Disabled</label>';
+						}
+					}),
+					click : false,
+					drag : false,
+					sortable : false
+				},
+				permissions : {
+					cell :  "html",
+					label : localization.tt("lbl.action"),
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue,model) {
+							return '<a href="#!/storm/'+model.get('assetId')+'/policy/'+model.id+'" class="btn btn-mini" title="Edit"><i class="icon-edit icon-large" /></a>\
+									<a href="javascript:void(0);" data-name ="deletePolicy" data-id="'+model.id+'"  class="btn btn-mini btn-danger" title="Delete"><i class="icon-trash icon-large" /></a>';
+							//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 = ['Topology Name(s)',,'Group','Policy Name'];//,'Start Date','End Date','Today'];
+			var serverAttrName  = [{text : "Topology Name(s)", label :"topologies"},
+			                       {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 StormTableLayout; 
+});


Mime
View raw message