You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by sn...@apache.org on 2014/12/03 20:02:05 UTC

incubator-ranger git commit: RANGER-192:Fixed spinning wheel in user detail page when there are many groups

Repository: incubator-ranger
Updated Branches:
  refs/heads/master 80ec0732a -> 78940677b


RANGER-192:Fixed spinning wheel in user detail page when there are many groups

Signed-off-by: sneethiraj <sn...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/78940677
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/78940677
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/78940677

Branch: refs/heads/master
Commit: 78940677b50dea8565a4d461633e0a05132c1e94
Parents: 80ec073
Author: vperiasamy <vp...@hortonworks.com>
Authored: Mon Nov 24 22:52:04 2014 -0500
Committer: sneethiraj <sn...@apache.org>
Committed: Wed Dec 3 14:01:46 2014 -0500

----------------------------------------------------------------------
 .../java/com/xasecure/service/XUserService.java |  5 +-
 .../webapp/scripts/controllers/Controller.js    | 11 ++---
 .../src/main/webapp/scripts/utils/XAUtils.js    | 18 ++++---
 .../webapp/scripts/views/common/AddGroup.js     | 52 ++++++++++++--------
 .../webapp/scripts/views/users/UserCreate.js    |  3 +-
 .../main/webapp/scripts/views/users/UserForm.js | 21 ++------
 .../scripts/views/users/UserTableLayout.js      | 33 +++++++++++--
 security-admin/src/main/webapp/styles/xa.css    |  2 +
 .../webapp/templates/common/AddGroup_tmpl.html  |  6 +--
 9 files changed, 89 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/java/com/xasecure/service/XUserService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/com/xasecure/service/XUserService.java b/security-admin/src/main/java/com/xasecure/service/XUserService.java
index 3d8505a..af44969 100644
--- a/security-admin/src/main/java/com/xasecure/service/XUserService.java
+++ b/security-admin/src/main/java/com/xasecure/service/XUserService.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -208,8 +209,8 @@ public class XUserService extends XUserServiceBase<XXUser, VXUser> {
 	private void populateGroupList(Long xUserId, VXUser vObj) {
 		List<XXGroupUser> xGroupUserList = daoManager.getXXGroupUser()
 				.findByUserId(xUserId);
-		Set<Long> groupIdList = new HashSet<Long>();
-		Set<String> groupNameList = new HashSet<String>();
+		Set<Long> groupIdList = new LinkedHashSet<Long>();
+		Set<String> groupNameList = new LinkedHashSet<String>();
 		if (xGroupUserList != null) {
 			for (XXGroupUser xGroupUser : xGroupUserList) {
 				groupIdList.add(xGroupUser.getParentGroupId());

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/scripts/controllers/Controller.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/controllers/Controller.js b/security-admin/src/main/webapp/scripts/controllers/Controller.js
index 41edd69..8b19533 100644
--- a/security-admin/src/main/webapp/scripts/controllers/Controller.js
+++ b/security-admin/src/main/webapp/scripts/controllers/Controller.js
@@ -571,19 +571,14 @@ define(function(require) {
 		   var view 		= require('views/users/UserCreate');
 		   var VXUser		= require('models/VXUser');
 		   var VXUserList	= require('collections/VXUserList');
-		   var VXGroupList	= require('collections/VXGroupList');
 
-		   var groupList = new VXGroupList();
 		   var user 	 = new VXUser({id : userId});
 		   
 		   user.collection = new VXUserList();
 		   user.fetch({cache : true}).done(function(){
-			   	   groupList.fetch({cache : true ,async:false}).done(function(){
-				   App.rContent.show(new view({
-					   model : user,
-					   groupList :groupList
-				   }));
-			   });   
+			   App.rContent.show(new view({
+				   model : user,
+			   }));
 		   });
 	   },
 	   groupCreateAction : function(){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/scripts/utils/XAUtils.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/utils/XAUtils.js b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
index 02cccf4..68b25a7 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
@@ -318,7 +318,7 @@ define(function(require) {
 		$.msg(options);
 	};
 	XAUtils.showGroups = function(rawValue){
-		var showMoreLess = false;
+		var showMoreLess = false,id;
 		if(_.isArray(rawValue))
 			rawValue =  new Backbone.Collection(rawValue);
 		if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
@@ -326,20 +326,24 @@ define(function(require) {
 				if(m.has('groupName'))
 					return m.get('groupName') ;
 			})));
-			if(groupArr.length > 0)
-				var resourceId =rawValue.models[0].attributes.resourceId; 
+			if(groupArr.length > 0){
+				if(rawValue.first().has('resourceId'))
+					id = rawValue.first().get('resourceId');
+				else
+					id = rawValue.first().get('userId');
+			}
 			var newGroupArr = _.map(groupArr, function(name, i){
 				if(i >=  4)
-					return '<span class="label label-info" policy-group-id="'+resourceId+'" style="display:none;">' + name + '</span>';
+					return '<span class="label label-info" policy-group-id="'+id+'" style="display:none;">' + name + '</span>';
 				else if(i == 3 && groupArr.length > 4){
 					showMoreLess = true;
-					return '<span class="label label-info" policy-group-id="'+resourceId+'">' + name + '</span>';
+					return '<span class="label label-info" policy-group-id="'+id+'">' + name + '</span>';
 				}
 				else
-					return '<span class="label label-info" policy-group-id="'+resourceId+'">' + name + '</span>';
+					return '<span class="label label-info" policy-group-id="'+id+'">' + name + '</span>';
 			});
 			if(showMoreLess){
-				newGroupArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMore" class="" policy-group-id="'+resourceId+'"><code style=""> + More..</code></a></span><span class="pull-left" ><a href="javascript:void(0);" data-id="showLess" class="" policy-group-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
+				newGroupArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMore" class="" policy-group-id="'+id+'"><code style=""> + More..</code></a></span><span class="pull-left" ><a href="javascript:void(0);" data-id="showLess" class="" policy-group-id="'+id+'" style="display:none;"><code> - Less..</code></a></span>');
 			}
 			return newGroupArr.length ? newGroupArr.join(' ') : '--';
 		}else

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/scripts/views/common/AddGroup.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/common/AddGroup.js b/security-admin/src/main/webapp/scripts/views/common/AddGroup.js
index a6a652a..ecee740 100644
--- a/security-admin/src/main/webapp/scripts/views/common/AddGroup.js
+++ b/security-admin/src/main/webapp/scripts/views/common/AddGroup.js
@@ -62,7 +62,7 @@ define(function(require){
 		initialize: function(options) {
 			console.log("initialized a AddGroup ItemView");
 
-			_.extend(this, _.pick(options, 'groupList'));
+			_.extend(this, _.pick(options));
 			this.bindEvents();
 		},
 
@@ -75,9 +75,6 @@ define(function(require){
 		/** on render callback */
 		onRender: function() {
 			var that = this , arr =[];
-			this.groupArr = this.groupList.map(function(m){
-				return { id : m.id+"" , text : m.get('name')};
-			});
 			this.initializePlugins();
 			$.fn.editable.defaults.mode = 'popover';
 			
@@ -92,7 +89,7 @@ define(function(require){
 			    emptytext : 'Please select',
 				select2 :this.getSelect2Options(),
 			    display: function(values,srcDate) {
-			    	if(_.isNull(values)){
+			    	if(_.isNull(values) ){
 			    		$(this).html('');
 			    		return;
 			    	}
@@ -100,23 +97,31 @@ define(function(require){
 			    	if(!_.isArray(values))
 			    		values=values.toString().split(',');
 			    	var valArr = [];
-		    		var valArr = _.map(values, function(val){
-		    			var obj = _.findWhere(that.groupArr,{id:val});
-		    			return "<span class='label label-inverse'>" + obj.text + "</span>";
-		    		});
+			    	if(!_.isUndefined($(that.el).find('.select2-container-multi')) && $(that.el).find('.select2-container-multi').length > 0){
+			    		values = $(that.el).find('.select2-container-multi').select2('data')
+			    	}else{
+			    		var groupNameList = that.model.get('groupNameList');
+			    		values = _.map(that.model.get('groupIdList'),function(id,i){ return {'id': id, 'text': groupNameList[i]};});
+			    	}
+			    	valArr = _.map(values,function(val,i){ 
+			    		return "<span class='label label-inverse'>" + val.text + "</span>"  
+			    	},that);
+			    	that.groupArr = values;
+			    	that.firstTimeEditGroup = true;
 		    		
 		    		$(this).html(valArr.join(" "));
-		    		if(valArr.length > 0){
+		    		/*if(valArr.length > 0){
 		    			that.$('.field-groupIdList').removeClass('error');
 		    			that.ui.errorMsg.hide();
 		    		}else{
 		    			that.$('.field-groupIdList').addClass('error');
 		    			that.ui.errorMsg.show();
-		    		}
+		    		}*/
 			    		
 			    },
 			    success: function(response, newValue) {
 			    	console.log(newValue);
+			    	that.firstTimeEditGroup = false;
 			    	//that.model.set('group',newValue);
 			    	
 			    }
@@ -143,22 +148,24 @@ define(function(require){
 		    return false;
 		},
 		getSelect2Options :function(){
-			var that = this;
+			var that = this,groupCnt = 0;
+    		var tags = _.map(that.model.get('groupIdList'),function(id,i){ return {'id': id, 'text': that.model.get('groupNameList')[i]};});
 			return{
 				closeOnSelect : true,
 				placeholder : 'Select Group',
 			//	maximumSelectionSize : 1,
 				width :'220px',
 				tokenSeparators: [",", " "],
-				tags : this.groupArr,
+				tags : tags,
+//				multiple: true,
 				initSelection : function (element, callback) {
 					var data = [];
-					console.log(that.groupList);
+					if(!_.isUndefined(that.groupArr) && that.firstTimeEditGroup){
+						data = that.groupArr;
+					}
+					else
+						data = element.select2('data');
 					
-					$(element.val().split(",")).each(function () {
-						var obj = _.findWhere(that.groupArr,{id:this});	
-						data.push({id: this, text: obj.text});
-					});
 					callback(data);
 				},
 				/*createSearchChoice: function(term, data) {
@@ -179,6 +186,7 @@ define(function(require){
 					},
 					results: function (data, page) { 
 						var results = [],selectedVals = [];
+						groupCnt = data.resultSize
 						if(!_.isEmpty(that.$('.tags').data('editable').input.$input.val()))
 							selectedVals = that.$('.tags').data('editable').input.$input.val().split(',');
 						if(data.resultSize != "0"){
@@ -187,6 +195,7 @@ define(function(require){
 								if(!_.isEmpty(selectedVals))
 									results = XAUtil.filterResultByIds(results, selectedVals);
 				//				console.log(results.length);
+								groupCnt = results.length;
 								return {results : results};
 					//		}
 						//	results = [{id : (data.vXGroups.id)+"", text: data.vXGroups.name}];
@@ -202,7 +211,10 @@ define(function(require){
 					return result.text;
 				},
 				formatNoMatches: function(result){
-					return 'No group found.';
+					if(groupCnt > 0)
+						return 'Please enter one more character.'
+					else
+						return 'No group found.';
 				}
 			};
 		},
@@ -223,4 +235,4 @@ define(function(require){
 	});
 
 	return AddGroup;
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/users/UserCreate.js b/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
index 3e53e8d..a37fd88 100644
--- a/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
@@ -75,7 +75,7 @@ define(function(require){
 		initialize: function(options) {
 			console.log("initialized a UserCreate Layout");
 
-			_.extend(this, _.pick(options, 'groupList'));
+			_.extend(this, _.pick(options));
 			this.showBasicFields = true;
 			this.editUser = this.model.has('id') ? true : false;
 			this.bindEvents();
@@ -117,7 +117,6 @@ define(function(require){
 			this.form = new UserForm({
 				template : require('hbs!tmpl/users/UserForm_tmpl'),
 				model : this.model,
-				groupList : this.groupList,
 				showBasicFields : this.showBasicFields
 			});
 			this.rForm.show(this.form);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/scripts/views/users/UserForm.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/users/UserForm.js b/security-admin/src/main/webapp/scripts/views/users/UserForm.js
index 7967776..e9126d8 100644
--- a/security-admin/src/main/webapp/scripts/views/users/UserForm.js
+++ b/security-admin/src/main/webapp/scripts/views/users/UserForm.js
@@ -164,22 +164,11 @@ define(function(require){
 		},
 		renderCustomFields: function(){
 			var that = this;
-			this.groupList = new VXGroupList();
-			var params = {sortBy : 'name'};
-			this.groupList.setPageSize(100);
-			this.groupList.fetch({
-				cache : true,
-				data : params
-				}).done(function(){
-				that.$('[data-customfields="groupIdList"]').html(new AddGroup({
-					groupList  : that.groupList,
-					model : that.model
-				}).render().el);
-				if(!that.showBasicFields)
-					that.$('[data-customfields="groupIdList"]').hide();
-			});
-			
-		
+			that.$('[data-customfields="groupIdList"]').html(new AddGroup({
+				model : that.model
+			}).render().el);
+			if(!that.showBasicFields)
+				that.$('[data-customfields="groupIdList"]').hide();
 		},
 		showCustomFields : function(){
 			if(!this.showBasicFields){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
index 0dfd571..e1f8e70 100644
--- a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
@@ -54,14 +54,17 @@ define(function(require){
     		tab 		: '.nav-tabs',
     		addNewUser	: '[data-id="addNewUser"]',
     		addNewGroup	: '[data-id="addNewGroup"]',
-    		visualSearch: '.visual_search'
+    		visualSearch: '.visual_search',
+    		btnShowMore : '[data-id="showMore"]',
+			btnShowLess : '[data-id="showLess"]',
     	},
 
 		/** ui events hash */
 		events: function() {
 			var events = {};
 			events['click '+this.ui.tab+' li a']  = 'onTabChange';
-			//events['change ' + this.ui.input]  = 'onInputChange';
+			events['click ' + this.ui.btnShowMore]  = 'onShowMore';
+			events['click ' + this.ui.btnShowLess]  = 'onShowLess';
 			return events;
 		},
 
@@ -252,6 +255,17 @@ define(function(require){
 					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
 					label : localization.tt("lbl.groups"),
 					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+						fromRaw: function (rawValue,model) {
+							if(!_.isUndefined(rawValue)){
+								return XAUtil.showGroups(_.map(rawValue,function(name){return {'userId': model.id,'groupName': name}}));
+							}
+							else
+							return '--';
+						}
+					}),
+					/*cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+					label : localization.tt("lbl.groups"),
+					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
 						fromRaw: function (rawValue) {
 							var html = '';
 							if(!_.isUndefined(rawValue)){
@@ -262,7 +276,7 @@ define(function(require){
 							}else
 								return '--';
 						}
-					}),
+					}),*/
 					editable : false,
 					sortable : false
 				},
@@ -457,7 +471,18 @@ define(function(require){
 				};
 			XAUtil.addVisualSearch(searchOpt,serverAttrName, coll,pluginAttr);
 		},
-
+		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(){
 		},

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/styles/xa.css
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/styles/xa.css b/security-admin/src/main/webapp/styles/xa.css
index b33c4a3..88d2928 100644
--- a/security-admin/src/main/webapp/styles/xa.css
+++ b/security-admin/src/main/webapp/styles/xa.css
@@ -1031,6 +1031,8 @@ ul.tabs > li > a {
 }
 .controls-row .tags {
   width: 225px;
+  max-height: 180px;
+  overflow-y: auto;
 }
 
 .controls-row .link-tag {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/78940677/security-admin/src/main/webapp/templates/common/AddGroup_tmpl.html
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/common/AddGroup_tmpl.html b/security-admin/src/main/webapp/templates/common/AddGroup_tmpl.html
index 04fc364..698d502 100644
--- a/security-admin/src/main/webapp/templates/common/AddGroup_tmpl.html
+++ b/security-admin/src/main/webapp/templates/common/AddGroup_tmpl.html
@@ -17,10 +17,10 @@
 <div class="control-group field-groupIdList">
 	<label class="control-label" for="c13_group">Group *</label>
     <div class="controls controls-row">                        
-        <span class="tags" id="tags-editable-1" data-toggle="manual" data-type="select2" 
+        <div class="tags" id="tags-editable-1" data-toggle="manual" data-type="select2" 
             data-value="{{groupId}}" data-original-title="Enter Group Name">
-        </span>
-       	<a href="#" id="tags-edit-1" data-editable="tags-editable-1" class="link-tag" style="margin-left:-37px;">
+        </div>
+       	<a href="#" id="tags-edit-1" data-editable="tags-editable-1" class="link-tag" >
        		{{#if isModelNew}}
        			<i class="icon-plus" title="Add"></i>
        		{{else}}