ranger-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From omal...@apache.org
Subject [09/44] ARGUS-1. Initial code commit (Selvamohan Neethiraj via omalley)
Date Thu, 14 Aug 2014 20:50:20 GMT
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) ? '--': '<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>';  
+						}
+					})
+
+				},
+				columns : {
+					label	: localization.tt("lbl.columnName")+'(s)',
+					cell :'html',
+					editable:false,
+					sortable : false,
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue) {
+							return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+
+				},
+				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') ? '<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>';
+							//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 ? '<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="#!/hbase/'+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 :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) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+				},
+				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 ? '<label class="label label-success">YES</label>' : '<label class="label label">NO</label>';
+						}
+					}),
+					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') ? '<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 :"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 ? '<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="#!/hdfs/'+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');
+		},
+		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('<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);
+		},
+		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) ? '--': '<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>';  
+						}
+					})
+				},
+				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 ? '<label class="label label-success">Include</label>' : '<label class="label label">Exclude</label>';
+						}
+					}),
+					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) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';  
+						}
+					})
+
+				},
+				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 ? '<label class="label label-success">Include</label>' : '<label class="label labe">Exclude</label>';
+						}
+					}),
+					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') ? '<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 :"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 ? '<label class="label label-success">Enabled</label>' : '<label class="label label-important">Disabled</label>';
+						}
+					}),
+					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 ? '<label class="label label-success">Include</label>' : '<label class="label label-important">Exclude</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="#!/hive/'+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 = ['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; 
+});


Mime
View raw message