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 <[email protected]>
Authored: Tue Jan 20 09:06:32 2015 -0800
Committer: Madhan Neethiraj <[email protected]>
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>
 

Reply via email to