ranger-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mad...@apache.org
Subject [25/55] [abbrv] incubator-ranger git commit: RANGER-203: UI fixes in pluggable service model implementation
Date Tue, 17 Feb 2015 08:16:58 GMT
RANGER-203: UI fixes in pluggable service model implementation


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

Branch: refs/heads/master
Commit: 63952722220d2ffc6f55e6cebe23f09a7a5960f4
Parents: 6edf6d8
Author: Gautam Borad <gborad@gmail.com>
Authored: Mon Feb 9 07:58:16 2015 -0800
Committer: Madhan Neethiraj <madhan@apache.org>
Committed: Mon Feb 9 07:58:16 2015 -0800

----------------------------------------------------------------------
 .../service-defs/ranger-servicedef-hdfs.json    |  2 +-
 ranger-util/.gitignore                          |  2 +
 .../scripts/models/BackboneFormDataType.js      | 31 +++++--
 .../main/webapp/scripts/models/RangerPolicy.js  |  7 ++
 .../main/webapp/scripts/modules/XAOverrides.js  | 88 +++++++++++++++++---
 .../src/main/webapp/scripts/utils/XAUtils.js    | 17 +++-
 .../scripts/views/policies/PermissionList.js    | 11 ++-
 .../views/policies/RangerPolicyCreate.js        |  3 +
 .../scripts/views/policies/RangerPolicyForm.js  | 43 ++++++----
 .../webapp/scripts/views/reports/AuditLayout.js |  2 +-
 .../scripts/views/service/ServiceCreate.js      |  5 --
 .../webapp/scripts/views/service/ServiceForm.js | 45 +++++++++-
 security-admin/src/main/webapp/styles/xa.css    |  4 +
 13 files changed, 210 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/agents-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
----------------------------------------------------------------------
diff --git a/agents-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json b/agents-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
old mode 100644
new mode 100755
index cf8f008..56160d9
--- a/agents-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
+++ b/agents-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
@@ -35,7 +35,7 @@
     {"name":"username",                                "type":"string",  "subType":"",  
          "mandatory":true, "label":"Username"},
     {"name":"password",                                "type":"password","subType":"",  
          "mandatory":true, "label":"Password"},
     {"name":"fs.default.name",                         "type":"string",  "subType":"",  
          "mandatory":true, "label":"Namenode URL"},
-    {"name":"hadoop.security.authorization",           "type":"bool",    "subType":"TrueFalse",
   "mandatory":true, "defaultValue":"false"},
+    {"name":"hadoop.security.authorization",           "type":"bool",    "subType":"YesTrue:NoFalse",
   "mandatory":true, "defaultValue":"false"},
     {"name":"hadoop.security.authentication",          "type":"enum",    "subType":"authnType",
   "mandatory":true, "defaultValue":"simple"},
     {"name":"hadoop.security.auth_to_local",           "type":"string",  "subType":"",  
          "mandatory":false},
     {"name":"dfs.datanode.kerberos.principal",         "type":"string",  "subType":"",  
          "mandatory":false},

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/ranger-util/.gitignore
----------------------------------------------------------------------
diff --git a/ranger-util/.gitignore b/ranger-util/.gitignore
index b83d222..3019b97 100644
--- a/ranger-util/.gitignore
+++ b/ranger-util/.gitignore
@@ -1 +1,3 @@
+/src/gen/org/apache/ranger/common/package-info.java
 /target/
+/bin/

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/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 847cecf..cff762a 100644
--- a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
+++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
@@ -54,7 +54,7 @@ define(function(require) {
 									var optionsTitle = _.map(optionsAttrs,function(field){ return field.name;});
 									formObj['sameLevelOpts'] = optionsTitle;
 									samelevelFieldCreated.push(v.level);
-									
+
 									v.name='sameLevel'+v.level;
 									v.label = '';
 								}
@@ -63,14 +63,29 @@ define(function(require) {
 							}
 							break;
 						case 'bool':
-							formObj.type = 'Checkbox';
-							formObj.options = {	y : 'Yes',n : 'No'};
+							if(!_.isUndefined(v.subType) && !_.isEmpty(v.subType)){
+								formObj.type = 'Select';
+								var subType = v.subType.split(':')
+								formObj.options = [subType[0].substr(0, subType[0].length - 4), subType[1].substr(0,
subType[1].length - 5)];
+								//to set default value 
+								if(form.model.isNew()){
+									if(!_.isUndefined(v.defaultValue) && v.defaultValue === "false"){
+										form.model.set(v.name, subType[1].substr(0, subType[1].length - 5))
+									}
+								}
+							}else{
+								formObj.type = 'Checkbox';
+								formObj.options = {	y : 'Yes',n : 'No'};
+							}
 							break;
 						case 'int':formObj.type = 'Number';break;
 						case 'enum':
 							var enumObj = _.find(enums, function(e) {return e && e.name == v.subType;});
 							formObj.type = 'Select';
-							formObj.options = _.pluck(_.compact(enumObj.elements),'label');
+//							formObj.options = _.pluck(_.compact(enumObj.elements),'label');
+							formObj.options = _.map((enumObj.elements), function(obj) {
+								return { 'label' : obj.label, 'val': obj.name};
+							});
 							break;
 						case 'path' : 
 							/*formObj.type = 'Text';
@@ -98,10 +113,16 @@ define(function(require) {
 
 					formObj.title = v.label || v.name;
 					formObj.validators = [];
-					if (_.has(v, 'mandatory') && v.mandatory) {
+					if (_.has(v, 'mandatory') && v.mandatory && v.type != 'bool') {
 						formObj.validators.push('required');
 						formObj.title = formObj.title + " *"
 					}
+					if(form.model.isNew()){
+						if(_.has(v, 'defaultValue') && !_.isEmpty(v.defaultValue) && v.type
!= 'bool'){
+							form.model.set(v.name, v.defaultValue)
+						}
+					}
+					
 					formObj['class'] = 'serviceConfig';
 					var name = v.name;
 					attrs[name] = formObj;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/security-admin/src/main/webapp/scripts/models/RangerPolicy.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/models/RangerPolicy.js b/security-admin/src/main/webapp/scripts/models/RangerPolicy.js
index 70de6f7..a0a0cd8 100644
--- a/security-admin/src/main/webapp/scripts/models/RangerPolicy.js
+++ b/security-admin/src/main/webapp/scripts/models/RangerPolicy.js
@@ -54,6 +54,13 @@ define(function(require){
 
 			// Overwrite your schema definition here
 			return _.extend(attrs,{
+				id : {
+					type		: 'Text',
+					title		: 'Policy ID *',
+					validators	: ['required'],
+					editorAttrs 	:{ 'disabled' : "true"},
+
+				},
 				name : {
 					type		: 'Text',
 					title		: 'Policy Name *',

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
index 2dd0421..bbacdac 100644
--- a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
+++ b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
@@ -360,7 +360,8 @@
 			
 			  initialize: function(options) {
 			    Form.editors.Base.prototype.initialize.call(this, options);
-			    _.extend(this, _.pick(this.schema,'excludeSupport','recursiveSupport','select2Opts','resourcesAtSameLevel','sameLevelOpts','level','initilializePathPlugin'));
+			    _.extend(this, _.pick(this.schema,'excludeSupport','recursiveSupport','select2Opts','resourcesAtSameLevel','sameLevelOpts','level',
+			    		'initilializePathPlugin', 'validators','name'));
 
 			    this.template = this.getTemplate();
 //			    this.resourceObj = { 'level' : this.level};
@@ -370,13 +371,16 @@
 			  },
 			  getTemplate : function() {
 				  var optionsHtml="", selectTemplate = '',excludeSupportToggleDiv='', recursiveSupportToggleDiv='';
+				  this.preserveResourceValues = {};
 				    if(!_.isUndefined(this.resourcesAtSameLevel) && this.resourcesAtSameLevel){
 				    	_.each(this.sameLevelOpts, function(option){ 
-				    		return optionsHtml += "<option value='"+option+"'>"+option+"</option>"
-				    	});
+				    		return optionsHtml += "<option value='"+option+"'>"+option+"</option>";
+				    		
+				    	},this);
 				    	selectTemplate = '<select data-js="resourceType" class="btn dropdown-toggle"
style="margin-right: 18px;margin-left: -116px;width: 100px;height: 29px;font-family: Tahoma;font-size:
14px;border-radius: 10px;border: 2px #cccccc solid;">\
 				    		'+optionsHtml+'\
 				    		</select>';
+				    	
 				    }
 				    if(!_.isUndefined(this.excludeSupport) && this.excludeSupport){
 				    	excludeSupportToggleDiv = '<div class="toggle-xa include-toggle" data-js="include"><div
 class="toggle"></div></div>';
@@ -395,7 +399,8 @@
 			   * Adds the editor to the DOM
 			   */
 			  render: function() {
-				var that = this;
+				var that = this, dirtyFieldValue = null;
+				var XAUtil = require('utils/XAUtils');
 			  	this.$el.html( this.template );
 			  	this.$resource = this.$el.find(this.ui.resource)
 			    this.$excludeSupport = this.$el.find(this.ui.excludeSupport)
@@ -404,22 +409,41 @@
 
 			    if(!_.isNull(this.value) && !_.isEmpty(this.value)){
 			    	this.$resource.val(this.value.values.toString())
+			    	
+			    	//check dirty field value for resource
+			    	this.$resource.on('change', function(e) {
+//			    		that.checkDirtyFieldForSelect2($(e.currentTarget), that, this.value);
+			    	});
+			    	//to preserve resources values to text field
+			    	if(!_.isUndefined(this.value.resourceType)){
+			    		this.preserveResourceValues[this.value.resourceType] = this.value.values.toString();

+			    	}else{
+			    		this.preserveResourceValues[this.name] = this.value.values.toString(); 
+			    	}
 			    }
 			    if(!_.isUndefined(this.select2Opts)){
-			    	this.$resource.select2(this.select2Opts);
+			    	this.$resource.select2(this.select2Opts).on('change',function(e){
+			    		console.log(e)
+			    		that.preserveResourceValues[that.$resourceType.val()] = e.currentTarget.value;
+			    		//check dirty field value for resource
+//			    		dirtyFieldValue = XAUtil.checkDirtyFieldForSelect2($(e.currentTarget), dirtyFieldValue,
that)
+			    		that.checkDirtyFieldForSelect2($(e.currentTarget), that, this.value);
+		    			
+			    	});
 			    }
-			  	var isExcludes = true, isRecursive = true;
+			  	var isExcludes = false, isRecursive = true;
 			  	if(this.excludeSupport){
 			  		if(!_.isNull(this.value)){
-			  			this.value.isExcludes = _.isUndefined(this.value.isExcludes) ? true : this.value.isExcludes;
+			  			this.value.isExcludes = _.isUndefined(this.value.isExcludes) ? false : this.value.isExcludes;
 			  			isExcludes = this.value.isExcludes
 			  		}
 			  		this.$excludeSupport.toggles({
-			  			on: isExcludes,
+			  			on: !isExcludes,
 			  			text : {on : 'include', off : 'exclude' },
 			  			width: 80,
 			  		}).on('toggle', function (e, active) {
-			  		    that.value.isExcludes = active;
+			  		    that.value.isExcludes = !active;
+			  		    XAUtil.checkDirtyFieldForToggle($(e.currentTarget))
 			  		});
 			  	}
 			  	if(this.recursiveSupport){
@@ -434,6 +458,7 @@
 //			  			height: 20
 			  		}).on('toggle', function (e, active) {
 			  		    that.value.isRecursive = active;
+			  		    XAUtil.checkDirtyFieldForToggle($(e.currentTarget))
 			  		});
 			  	}
 			  	if(!_.isUndefined(this.$resourceType) && this.$resourceType.length > 0){
@@ -442,7 +467,11 @@
 			  		}
 			  		this.$resourceType.on('change', function(e) {
 			  			if(!_.isUndefined(that.select2Opts)){
-			  				that.$resource.select2('val', '')
+			  				if(!_.isUndefined(that.preserveResourceValues[e.currentTarget.value])){
+			  					that.$resource.select2('val', that.preserveResourceValues[e.currentTarget.value].split(','))
+			  				}else{
+			  					that.$resource.select2('val', '')
+			  				}
 						  }else{
 							  that.$resource.val('');
 						  }
@@ -451,6 +480,7 @@
 			  			that.value.isRecursive = true;
 			  			that.$excludeSupport.trigger('toggleOn');
 			  			that.$recursiveSupport.trigger('toggleOn');
+			  			($(e.currentTarget).addClass('dirtyField'))
 					});
 			  	}
 			    return this;
@@ -461,7 +491,12 @@
 				  if(!_.isUndefined(this.$resourceType) && this.$resourceType.length > 0){
 					  this.value['resourceType'] = this.$resourceType.val();  
 				  }
-				  this.value['resource'] = this.$resource.val(); 
+				  this.value['resource'] = this.$resource.val();
+				  //for validation
+				  if(!_.isUndefined(this.validators) && ($.inArray('required',this.validators)
!= -1)){
+					  if(_.isEmpty(this.value.resource))
+						  return null;
+				  }
 				  return this.value;
 				  //return this.$el.find('.active').text() == "ON" ? true : false;
 			  },
@@ -469,6 +504,37 @@
 			  setValue: function(val) {
 				  return true;
 			  },
+			  checkDirtyFieldForSelect2 : function($el,that,value) {
+				  var defaultResourceValue = _.isUndefined(that.value.values) ? [] : that.value.values;
 
+//		    		that.value.values = this.value;
+		    		
+		    		if($el.hasClass('dirtyField')){
+		    			var tmpValue={};
+		    			if(_.isEmpty(value)){
+		    				tmpValue.values = []
+		    			}else{
+		    				tmpValue.values = value.split(',');
+		    			}	
+		    			tmpValue.isExcludes = that.value.isExcludes;
+		    			tmpValue.isRecursive = that.value.isRecursive;
+		    			if(_.isEqual(tmpValue, dirtyFieldValue)){
+		    				$el.removeClass('dirtyField');
+		    			}
+		    			
+		    		}else if(!$el.hasClass('dirtyField')){
+		    			$el.addClass('dirtyField');
+	    				if(!_.isNull(that.value)){
+	    					that.value.values = defaultResourceValue;
+	    					if(_.isUndefined(that.value.isExcludes)){
+	    						that.value.isExcludes = that.excludeSupport ? true : false;
+	    					}
+	    					if(_.isUndefined(that.value.isRecursive)){
+	    						that.value.isRecursive = that.RecursiveSupport ? true : false;
+	    					}
+	    				}
+		    			dirtyFieldValue =  that.value
+		    		}
+			  }
 			
 			});
 	  

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/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 2acef28..b2514f3 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
@@ -462,13 +462,22 @@ define(function(require) {
 				$elem.addClass('dirtyField');
 			}
 	};
-	XAUtils.checkDirtyFieldForToggle = function(fieldEditor){
-		if(fieldEditor.$el.hasClass('dirtyField')){
-			fieldEditor.$el.removeClass('dirtyField');
+	XAUtils.checkDirtyFieldForToggle = function($el){
+		if($el.hasClass('dirtyField')){
+			$el.removeClass('dirtyField');
 		}else{
-			fieldEditor.$el.addClass('dirtyField');
+			$el.addClass('dirtyField');
 		}
 	};
+	XAUtils.checkDirtyFieldForSelect2 = function($el, dirtyFieldValue, that){
+		if($el.hasClass('dirtyField') && _.isEqual($el.val(), dirtyFieldValue.toString())){
+			$el.removeClass('dirtyField');
+		}else if(!$el.hasClass('dirtyField')){
+			$el.addClass('dirtyField');
+			dirtyFieldValue =  !_.isUndefined(that.value.values) ? that.value.values : '';
+		}
+		return dirtyFieldValue;
+	};
 	XAUtils.enumToSelectLabelValuePairs = function(myEnum) {
 		return _.map(myEnum, function(o){
 			return {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
index a1f95c5..7cf66a9 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
@@ -98,7 +98,7 @@ define(function(require) {
 				
 				if(!_.isUndefined(this.model.get('conditions'))){
 					_.each(this.model.get('conditions'), function(obj){
-						this.$el.find('input[data-js="'+obj.type+'"]').val(obj.value.toString())
+						this.$el.find('input[data-js="'+obj.type+'"]').val(obj.values.toString())
 					},this);
 				}
 				_.each(this.model.get('accesses'), function(p){
@@ -127,7 +127,7 @@ define(function(require) {
 				}, this);
 				//Set PolicyCondtion Obj to show in edit mode
 				_.each(this.model.get('conditions'), function(p){
-					this.conditions[p.type] = p.value;
+					this.conditions[p.type] = p.values;
 				}, this);
 			}
 		},
@@ -247,6 +247,8 @@ define(function(require) {
 						values = _.without(values,"-1")
 					}
 //			    	that.checkDirtyFieldForGroup(values);
+					
+					
 					var permTypeArr = [];
 					var valArr = _.map(values, function(id){
 						if(!_.isUndefined(id)){
@@ -331,7 +333,9 @@ define(function(require) {
 								i++;
 								return _.isEmpty(val) ? '' : '<span class="'+label+'">'+name+' : '+ val + '</span>';

 							});
-							var cond = _.map(value, function(val, name) {return {'type' : name, 'value' :val};});
+							var cond = _.map(value, function(val, name) {
+								return {'type' : name, 'values' : !_.isArray(val) ?  val.split(',') : val};
+							});
 							that.model.set('conditions', cond);
 							$(this).html(html);
 							that.ui.addConditionsSpan.find('i').attr('class', 'icon-pencil');
@@ -372,6 +376,7 @@ define(function(require) {
 		},
 		evClickTD : function(e){
 			var $el = $(e.currentTarget);
+			XAUtil.checkDirtyFieldForToggle($el);
 			//Set Delegated Admin value 
 			if(!_.isUndefined($el.find('input').data('js'))){
 				this.model.set('delegateAdmin',$el.find('input').is(':checked'))

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
index 7c40ade..eacf119 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
@@ -117,7 +117,10 @@ define(function(require){
 
 		/** on render callback */
 		onRender: function() {
+			XAUtil.showAlerForDisabledPolicy(this);
 			this.rForm.show(this.form);
+			this.rForm.$el.dirtyFields();
+			XAUtil.preventNavigation(localization.tt('dialogMsg.preventNavPolicyForm'),this.rForm.$el);
 		},
 		onSave: function(){
 			var that = this, valid = false;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/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 d4e1a83..d077ca1 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -70,12 +70,9 @@ define(function(require){
 			this.on('isAuditEnabled:change', function(form, fieldEditor){
     			this.evAuditChange(form, fieldEditor);
     		});
-			this.on('isRecursive:change', function(form, fieldEditor){
-    			this.evRecursiveChange(form, fieldEditor);
-    		});
-			this.on('resourceStatus:change', function(form, fieldEditor){
-    			this.evResourceStatusChange(form, fieldEditor);
-    		});
+			this.on('isEnabled:change', function(form, fieldEditor){
+				this.evIsEnabledChange(form, fieldEditor);
+			});
 		},
 
 		/** fields for the form
@@ -86,12 +83,16 @@ define(function(require){
 		},
 		getSchema : function(){
 			var attrs = {};
+			var basicSchema = ['id', 'name','isEnabled']
 			var schemaNames = ['description', 'isAuditEnabled'];
+			if(this.model.isNew()){
+				basicSchema.shift();
+			}
 			
 			var formDataType = new BackboneFormDataType();
 			attrs = formDataType.getFormElements(this.rangerServiceDefModel.get('resources'),this.rangerServiceDefModel.get('enums'),
attrs, this);
 			
-			var attr1 = _.pick(_.result(this.model,'schemaBase'), 'name','isEnabled');
+			var attr1 = _.pick(_.result(this.model,'schemaBase'),basicSchema);
 			var attr2 = _.pick(_.result(this.model,'schemaBase'),schemaNames);
 			return _.extend(attr1,_.extend(attrs,attr2));
 		},
@@ -111,13 +112,10 @@ define(function(require){
 			this.$el.find('.field-isEnabled').find('.control-label').remove();
 		},
 		evAuditChange : function(form, fieldEditor){
-			XAUtil.checkDirtyFieldForToggle(fieldEditor);
+			XAUtil.checkDirtyFieldForToggle(fieldEditor.$el);
 		},
-		evRecursiveChange : function(form, fieldEditor){
-			XAUtil.checkDirtyFieldForToggle(fieldEditor);
-		},
-		evResourceStatusChange : function(form, fieldEditor){
-			XAUtil.checkDirtyFieldForToggle(fieldEditor);
+		evIsEnabledChange : function(form, fieldEditor){
+			XAUtil.checkDirtyFieldForToggle(fieldEditor.$el);
 		},
 		setupForm : function() {
 			if(!this.model.isNew()){
@@ -248,7 +246,10 @@ define(function(require){
 		},
 		/** all post render plugin initialization */
 		initializePathPlugins: function(){
-			var that= this;	
+			var that= this,defaultValue = [];
+			if(!this.model.isNew() && _.isUndefined(this.model.get('path'))){
+				defaultValue = this.model.get('path').values;
+			}
 			function split( val ) {
 				return val.split( /,\s*/ );
 			}
@@ -288,8 +289,8 @@ define(function(require){
 							dataType : 'json',
 							contentType: "application/json; charset=utf-8",
 						}).done(function(data){
-							if(data.vXStrings){
-								response(data.vXStrings);
+							if(data){
+								response(data);
 							} else {
 								response();
 							}
@@ -350,6 +351,9 @@ define(function(require){
 			        	return false;
 			        }
 					}
+			}).on('change',function(e){
+				//check dirty field for tagit input type : `path`
+				XAUtil.checkDirtyField($(e.currentTarget).val(), defaultValue.toString(), $(e.currentTarget))
 			});
 	
 			
@@ -407,11 +411,14 @@ define(function(require){
 						},
 						results: function (data, page) { 
 							var results = [];
-							if(!_.isUndefined(data)){
+							if(data.length > 0){
+								results = data.map(function(m, i){	return {id : m, text: m};	});
+							}
+							/*if(!_.isUndefined(data)){
 								if(data.resultSize != "0"){
 									results = data.vXStrings.map(function(m, i){	return {id : m.value, text: m.value};
});
 								}
-							}
+							}*/
 							return { 
 								results : results
 							};

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
index e8496db..ac3ab7d 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
@@ -736,7 +736,7 @@ define(function(require) {
 						formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
 							fromRaw: function (rawValue, model) {
 								if(rawValue == -1){
-									return rawValue;
+									return '--';
 								}	
 								var rangerService = new RangerService();
 								rangerService.urlRoot += '/name/'+model.get('repoName'); 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
index 413f125..4347479 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
@@ -88,11 +88,6 @@ define(function(require){
 			/*if(! this.model.isNew()){
 				this.setupModel();
 			}*/
-			if(!this.model.isNew()){
-				_.each(this.model.attributes.configs,function(name, value){
-					this.model.set(value,name)
-				},this);
-			}
 			this.form = new ServiceForm({
 				model :	this.model,
 				rangerServiceDefModel : this.rangerServiceDefModel,

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
index fc3ddae..b4a255a 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
@@ -23,6 +23,8 @@ define(function(require){
 
 	var Backbone		= require('backbone');
 	var XAEnums			= require('utils/XAEnums');
+	var XAUtil			= require('utils/XAUtils');
+	
 	var localization	= require('utils/XALangSupport');
 	var BackboneFormDataType	= require('models/BackboneFormDataType');
 
@@ -56,6 +58,7 @@ define(function(require){
 		initialize: function(options) {
 			console.log("initialized a ServiceForm Form View");
 			_.extend(this, _.pick(options, 'rangerServiceDefModel'));
+			this.setupFormForEditMode();
     		Backbone.Form.prototype.initialize.call(this, options);
 
 			this.bindEvents();
@@ -63,6 +66,9 @@ define(function(require){
 
 		/** all events binding here */
 		bindEvents : function(){
+			this.on('isEnabled:change', function(form, fieldEditor){
+				this.evIsEnabledChange(form, fieldEditor);
+			});
 		},
 
 		/** schema for the form
@@ -90,6 +96,18 @@ define(function(require){
 			this.initializePlugins();
 			this.renderCustomFields();
 		},
+		setupFormForEditMode : function() {
+			if(!this.model.isNew()){
+				_.each(this.model.get('configs'),function(value, name){
+					var configObj = _.findWhere(this.rangerServiceDefModel.get('configs'),{'name' : name
});
+					if(configObj.type == 'bool'){
+						this.model.set(name, this.getStringFromBoolean(configObj, value))
+					}else{
+						this.model.set(name, value)
+					}
+				},this);
+			}
+		},
 		setupForm : function() {
 			if(this.model.isNew()){
 				this.fields.isEnabled.editor.setValue(XAEnums.ActiveStatus.STATUS_ENABLED.value);
@@ -102,6 +120,9 @@ define(function(require){
 				}
 			}	
 		},
+		evIsEnabledChange : function(form, fieldEditor){
+			XAUtil.checkDirtyFieldForToggle(fieldEditor.$el);
+		},
 		/** all custom field rendering */
 		renderCustomFields: function(){
 		},
@@ -121,7 +142,11 @@ define(function(require){
 			var config = {};
 			_.each(this.rangerServiceDefModel.get('configs'),function(obj){
 				if(!_.isNull(obj)){
-					config[obj.name] = that.model.get(obj.name).toString();
+					if(obj.type == 'bool'){
+						config[obj.name] = that.getBooleanForConfig(obj, that.model);
+					}else{
+						config[obj.name] = that.model.get(obj.name).toString();
+					}
 					that.model.unset(obj.name);
 				}
 			});
@@ -147,7 +172,23 @@ define(function(require){
 			var index = $.inArray(elem,arr);
 			if(index >= 0) arr.splice(index,1);
 			return arr;
-		}
+		},
+		getBooleanForConfig : function(cofigObj, model) {
+			var subType = cofigObj.subType.split(':');
+			if(subType[0].indexOf(model.get(cofigObj.name)) >= 0 ){
+				return true;
+			}else{
+				return false;
+			}
+		},
+		getStringFromBoolean : function(configObj, value) {
+			var subType = configObj.subType.split(':');
+			if(subType[0].toLowerCase().indexOf(value) >= 0 ){
+				return subType[0].substr(0, subType[0].length - 4);
+			}else{
+				return subType[1].substr(0, subType[0].length - 5);
+			}
+		},
 	});
 
 	return ServiceForm;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/63952722/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 18110c2..468155e 100644
--- a/security-admin/src/main/webapp/styles/xa.css
+++ b/security-admin/src/main/webapp/styles/xa.css
@@ -1736,4 +1736,8 @@ margin-bottom: 5px;
 .recursive-toggle-path {
 margin-left: 347px;
 margin-top: -29px;
+}
+.policy-form .help-inline {
+	position: relative;
+	top: 10px;
 }
\ No newline at end of file


Mime
View raw message