You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/01/20 18:07:05 UTC

incubator-ranger git commit: RANGER-203: Added support to resources at same level

Repository: incubator-ranger
Updated Branches:
  refs/heads/stack 31db54702 -> 0d7f8dea8


RANGER-203: Added support to resources at same level


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

Branch: refs/heads/stack
Commit: 0d7f8dea8a507c602d860e39d6d94738bbbc3a54
Parents: 31db547
Author: Gautam Borad <gb...@gmail.com>
Authored: Tue Jan 20 09:06:32 2015 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Tue Jan 20 09:06:32 2015 -0800

----------------------------------------------------------------------
 .../scripts/models/BackboneFormDataType.js      |  11 +-
 .../scripts/views/policies/RangerPolicyForm.js  | 151 ++++++++++++++++++-
 .../views/policies/RangerPolicyTableLayout.js   |   5 +-
 security-admin/src/main/webapp/styles/xa.css    |   3 +
 .../policies/RangerPolicyForm_tmpl.html         |  21 +++
 .../policies/RangerPolicyTableLayout_tmpl.html  |   2 +-
 6 files changed, 183 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
index b8c8bb2..b5792fb 100644
--- a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
+++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
@@ -33,8 +33,17 @@ define(function(require) {
 						case 'string':
 							if(!_.isUndefined(v.lookupSupported) && v.lookupSupported ){
 								formObj.type = 'Select2Remote';
-								formObj.pluginAttr = _.isUndefined(v.url) ? form.getPlugginAttr(false) : form.getPlugginAttr(true, v.url), 
+								 if(_.isUndefined(v.url)){
+									 var options = {'containerCssClass' : v.name };
+									 formObj.pluginAttr =  form.getPlugginAttr(false, options); 
+								 }else{
+									 var options = {'url' : v.url , 'containerCssClass' : v.name };									 
+									 formObj.pluginAttr =  form.getPlugginAttr(true, options);
+								 }
 								formObj.editorAttrs = {'data-placeholder': v.label },
+								//
+								formObj.level = v.level;
+								formObj.name = v.name;
 								formObj.options = function(callback, editor){
 				                    callback();
 				                },

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
index 532ed67..d668c6f 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -49,6 +49,10 @@ define(function(require){
 	{
 		_viewName : 'RangerPolicyForm',
 
+		templateData : function() {
+			
+			return this.getTemplateData();
+		},
     	/**
 		* intialize a new RangerPolicyForm Form View 
 		* @constructs
@@ -76,6 +80,10 @@ define(function(require){
 			this.on('resourceStatus:change', function(form, fieldEditor){
     			this.evResourceStatusChange(form, fieldEditor);
     		});
+			
+			/*this.on('sameLevelType:change', function(form, fieldEditor){
+				this.evResourceTypeChange(form, fieldEditor);
+			});*/
 		},
 
 		/** fields for the form
@@ -91,14 +99,96 @@ define(function(require){
 			var formDataType = new BackboneFormDataType();
 			attrs = formDataType.getFormElements(this.rangerServiceDefModel.get('resources'),this.rangerServiceDefModel.get('enums'), attrs, this);
 			
+			attrs = this.setSameLevelField(attrs, schemaNames);
+			
 			var attr1 = _.pick(_.result(this.model,'schemaBase'), 'name','isEnabled');
 			var attr2 = _.pick(_.result(this.model,'schemaBase'),schemaNames);
 			return _.extend(attr1,_.extend(attrs,attr2));
 		},
+		setSameLevelField : function(attrs, schemaNames) {
+			var level = [],sameLevel = [],that = this;
+			this.sameLevelType = [],this.selectOptions = {};
+			this.sameLevelFound = false;
+			//Get array of all levels like [1,2,2,3,4,4,4,5,6]
+			_.each(attrs, function(obj){ level.push(obj.level) })
+			
+			/*	count levels 
+				counts = { 1 : 1, 2 : 2, 3 : 1, 4: 3, 5 : 1, 6 : 1}
+			*/
+			var counts = {};
+			level.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });
+			//create level counter array which has more than one same level
+			_.each(counts, function(cnt,l) {
+				if(cnt > 1){
+					sameLevel.push(l);
+					this.sameLevelFound = true;
+				}
+			}, this);
+			
+			if(this.sameLevelFound){
+				this.schemaBase = ['name','isEnabled'];
+				this.schemaBase1 = schemaNames;
+				var editorsAttr = [], fieldAttrs = [];
+				//iterate over same level array
+				_.each(sameLevel, function(lev, i) {
+					//get same level resources
+					var OptionsAttrs = _.filter(attrs,function(field){ if(field.level == lev) return field;})
+					var optionsTitle = _.map(OptionsAttrs,function(field){ return field.name;});
+					
+					//cretae selectType for same level resource
+					attrs['sameLevelType'+lev]  = {
+							type 	: 'Select',
+							options	:  optionsTitle,
+							editorAttrs : {'class':'btn dropdown-toggle','style': 'width: 100px;height: 29px;font-family: Tahoma;font-size: 14px;border-radius: 10px;border: 2px #cccccc solid;'}
+					};
+					//hide all select options
+					_.each(optionsTitle, function(field,i){ 
+						if( i > 0 ) attrs[field].editorAttrs['style']='display:none';
+					})
+					//create sameLevelType array
+					var tmp = { 'name' : "sameLevelType"+lev, 'options' : optionsTitle.toString() };
+					this.sameLevelType.push(tmp);
+				
+					editorsAttr = editorsAttr.concat(optionsTitle)
+				}, this)
+				
+				//create fieldAttrs array 
+				_.each(attrs, function(obj){
+					if(!_.isUndefined(obj.name) && $.inArray(obj.name, editorsAttr) < 0 ){
+							fieldAttrs.push(obj.name);
+					} 
+				});
+				
+				// Add Resources in same order as give in JSON
+				var addToschemaBase = true;
+				_.each(attrs,function(field, i) {
+					if(!_.isUndefined(field.name)){
+						if($.inArray(field.name, editorsAttr) < 0 && addToschemaBase){
+							this.schemaBase.push(field.name)
+						}
+						if($.inArray(field.name, editorsAttr) >= 0){
+							addToschemaBase = false;
+						}
+						if($.inArray(field.name, editorsAttr) < 0 && !addToschemaBase){
+							this.schemaBase1.unshift(field.name)
+						}
+						
+					}
+				}, this);
+				
+				
+			}
+			//add change events on all sameLevelType
+			_.each(this.sameLevelType, function(obj, i){
+				that.on(obj.name+':change', function(form, fieldEditor) {
+					this.evResourceTypeChange(form, fieldEditor);
+				});
+			});
+			return attrs;
+		},
 		/** on render callback */
 		render: function(options) {
 			var that = this;
-			
 			Backbone.Form.prototype.render.call(this, options);
 			//initialize path plugin for hdfs component : resourcePath
 			if(!_.isUndefined(this.initilializePathPlugin) && this.initilializePathPlugin){ 
@@ -109,6 +199,7 @@ define(function(require){
 				this.setUpSwitches();
 			}
 			this.$el.find('.field-isEnabled').find('.control-label').remove();
+			this.setupSameLevelType();
 		},
 		evAuditChange : function(form, fieldEditor){
 			XAUtil.checkDirtyFieldForToggle(fieldEditor);
@@ -119,12 +210,25 @@ define(function(require){
 		evResourceStatusChange : function(form, fieldEditor){
 			XAUtil.checkDirtyFieldForToggle(fieldEditor);
 		},
+		getTemplateData : function() {
+			var obj={ 'fieldsets' : true };
+			if(this.sameLevelFound){ 
+				obj  = { sameLevelType  : this.sameLevelType, 
+						 schemaBase	  	: this.schemaBase.toString(),
+						 schemaBase1	: this.schemaBase1.toString(),
+						 
+					};
+				if(this.schemaBase.length <= 2)
+					obj.marginBottom57 = 'margin-bottom-57';
+			}
+			return obj;
+		},
 		setupForm : function() {
 			_.each(this.model.attributes.resources,function(obj,key){
 				this.model.set(key, obj.values.toString());
-				if(!_.isUndefined(obj.isRecursive))
+				if(!_.isUndefined(obj.isRecursive)){
 					this.model.set('isRecursive', obj.isRecursive);
-				
+				}
 			},this)
 		},
 		setUpSwitches :function(){
@@ -134,6 +238,20 @@ define(function(require){
 			if(!_.isUndefined(this.fields.isRecursive))
 				this.fields.isRecursive.editor.setValue(this.model.get('isRecursive'));
 		},
+		setupSameLevelType : function() {
+			//setup sameLevelType `select` if there
+			_.each(this.sameLevelType, function(obj, i){
+				if(!this.model.isNew()){
+					var sameLevelOpt = obj.options.split(',');
+					var sameLevelVal = _.find(sameLevelOpt, function(type){ if(!_.isEmpty(this.model.get(type))) return type;},this)
+					console.log(this.model.attributes)
+					this.model.set(obj.name,sameLevelVal);
+					this.fields[obj.name].editor.$el.val(sameLevelVal).trigger('change')
+				}else{
+					this.fields[obj.name].editor.$el.trigger('change')
+				}
+			}, this);
+		},
 		/** all custom field rendering */
 		renderCustomFields: function(){
 			var that = this;
@@ -324,15 +442,16 @@ define(function(require){
 	
 			
 		},
-		getPlugginAttr :function(autocomplete, searchType, lookupURL){
+		getPlugginAttr :function(autocomplete, options){
 			var that =this;
-			var type = searchType;
+			var type = options.containerCssClass;
 			if(!autocomplete)
-				return{tags : true,width :'220px',multiple: true,minimumInputLength: 1};
+				return{tags : true,width :'220px',multiple: true,minimumInputLength: 1, 'containerCssClass' : type};
 			else {
 				
 				
 				return {
+					containerCssClass : options.type,
 					closeOnSelect : true,
 					tags:true,
 					multiple: true,
@@ -357,7 +476,7 @@ define(function(require){
 						}
 					},
 					ajax: { 
-						url: lookupURL,
+						url: options.lookupURL,
 						dataType: 'json',
 						params : {
 							timeout: 3000
@@ -405,6 +524,24 @@ define(function(require){
 				};	
 			}
 		},
+		evResourceTypeChange : function(form, fieldEditor){
+			var that = this;
+			var name = fieldEditor.$el.val();
+			var sameLevel = _.findWhere(this.sameLevelType, {'name' : fieldEditor.key});
+			form.$el.find('[data-editors="'+sameLevel.options+'"]').children().hide();
+			this.fields[name].editor.$el.select2('val','');
+			this.fields[name].editor.$el.show();
+			form.$el.find('.'+name).show();
+			
+			_.each(sameLevel.options.split(','), function(nm){
+				if(name != nm){
+					var index = this.fields.database.editor.validators.indexOf("required");
+					this.fields[nm].editor.validators.splice(index,1);
+					this.fields[nm].editor.$el.select2('val','');
+				}
+			}, this);
+			
+		},
 	});
 
 	return RangerPolicyForm;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
index eec4484..5726dd1 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
@@ -125,6 +125,9 @@ define(function(require){
 //			this.initializePlugins();
 //			this.addVisualSearch();
 			this.renderTable();
+			//TODO REMOVE
+			this.rTableList.$el.find('th[class="renderable table"]').removeClass('table')
+			
 //			XAUtil.highlightDisabledPolicy(this);
 		},
 
@@ -194,7 +197,7 @@ define(function(require){
 							formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
 								fromRaw: function (rawValue,model) {
 									rawValue = model.get('resources')
-									return rawValue[obj.name].values.toString();
+									return _.isUndefined(rawValue[obj.name]) ? '--' : rawValue[obj.name].values.toString();
 								}
 							})
 						};

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/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 55f3a6a..89f3a47 100644
--- a/security-admin/src/main/webapp/styles/xa.css
+++ b/security-admin/src/main/webapp/styles/xa.css
@@ -1701,4 +1701,7 @@ margin-bottom: 5px;
 	overflow-y: auto;
 	padding-right: 25px;
 	max-height: 250px;
+}
+.margin-bottom-57 {
+	margin-bottom:57px;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html b/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html
index d4df1fa..d2f26fe 100644
--- a/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html
+++ b/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html
@@ -19,7 +19,28 @@
 		<p class="formHeader">
 			Policy Details : 
 		</p>
+		
+		
+		
+{{#if fieldsets}}		
 	<b data-fieldsets class="policy-form"></b>
+{{else}}	      
+    <div data-fields="{{schemaBase}}" class="policy-form {{marginBottom57}}" ></div>
+    <div>
+    	{{#each sameLevelType}}
+            <div style="margin-left: 65px;margin-bottom: 19px;">
+	            <span data-editors="{{this.name}}" class="policy-form"  ></span>
+	            <span data-editors="{{this.options}}" class="policy-form" style=" margin-left: 11px; "></span>
+            </div>
+         {{/each}}   
+            <!-- <b data-editors="udf" class="policy-form"></b> -->
+    </div>
+    <div data-fields="{{schemaBase1}}" class="policy-form" ></div>
+{{/if}}    	
+	<!-- <b data-fieldsets class="policy-form"></b> -->
+	
+	
+	
 	</fieldset>
 	 <fieldset>
 		<p class="formHeader">

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html b/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
index 5a8937e..6776d5d 100644
--- a/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
+++ b/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
@@ -24,7 +24,7 @@
 			<a href="#!/service/{{rangerService.id}}/policies/create" class="btn btn-primary btn-right" type="button"> {{tt 'lbl.addNewPolicy'}} </a>
 		</div>
 		
-		<div data-id="r_table" class="hdfs-table clickable"></div>
+		<div data-id="r_table" class="clickable"></div>
 	</div>
 </div>