RANGER-2177: Handle validations for duplicate configuration item during service 
create/edit

Signed-off-by: zhangqiang2 <[email protected]>


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

Branch: refs/heads/ranger-1.1
Commit: a2de0ebff8dfb7d36f9e50ef027b404100be1f67
Parents: 27f56df
Author: xingpeng1 <[email protected]>
Authored: Fri Aug 3 15:58:24 2018 +0800
Committer: Mehul Parikh <[email protected]>
Committed: Tue Sep 4 11:38:54 2018 +0530

----------------------------------------------------------------------
 .../scripts/modules/globalize/message/en.js     |  3 +-
 .../scripts/views/service/ServiceCreate.js      | 22 ++++++------
 .../webapp/scripts/views/service/ServiceForm.js | 36 ++++++++++++++------
 3 files changed, 39 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/a2de0ebf/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js 
b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
index f4c3c27..99cbf55 100644
--- a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
+++ b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
@@ -437,7 +437,8 @@ define(function(require) {
                 noUserFoundText                        : 'No user associate 
with this group.',
                 showInitialHundredUser  : 'Initially search filter is applied 
for first hundred users. To get more users click on ',
                 searchForUserSync       :"Search for your user sync audits...",
-                policyExpired           :'Policy Expired'
+                policyExpired           :'Policy Expired',
+                duplicateNewConfigValidationMsg     :'Please make sure the new 
configuration has no duplicate names'
 
                        },
                        plcHldr : {

http://git-wip-us.apache.org/repos/asf/ranger/blob/a2de0ebf/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 c8ecdc3..7c2c778 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
- 
+
 /* 
  * Repository/Service create view
  */
@@ -31,7 +31,7 @@ define(function(require){
        var XAEnums                     = require('utils/XAEnums');
        var XALinks             = require('modules/XALinks');
        var localization        = require('utils/XALangSupport');
-       
+
        var ServiceForm         = require('views/service/ServiceForm');
        var RangerServiceDef    = require('models/RangerServiceDef');
        var ServiceCreateTmpl = require('hbs!tmpl/service/ServiceCreate_tmpl');
@@ -42,19 +42,19 @@ define(function(require){
                _viewName : 'ServiceCreate',
 
                template: ServiceCreateTmpl,
-               
+
                templateHelpers : function(){
                        return { editService : this.editService};
                },
-        
+
                breadCrumbs :function(){
-                       var name  = this.rangerServiceDefModel.get('name') != 
XAEnums.ServiceType.SERVICE_TAG.label ? 'ServiceManager' : 
'TagBasedServiceManager'; 
+                       var name  = this.rangerServiceDefModel.get('name') != 
XAEnums.ServiceType.SERVICE_TAG.label ? 'ServiceManager' : 
'TagBasedServiceManager';
                        if(this.model.isNew()){
                                return [XALinks.get(name), 
XALinks.get('ServiceCreate')];
                        } else {
                                return [XALinks.get(name), 
XALinks.get('ServiceEdit')];
                        }
-               },        
+               },
 
                /** Layout sub regions */
                regions: {
@@ -132,7 +132,9 @@ define(function(require){
                        if(! _.isEmpty(errors)){
                                return;
                        }
-                       this.form.formValidation();
+                       if (!this.form.formValidation()) {
+                               return;
+                       }
                        this.saveService();
                },
                saveService : function(){
@@ -165,7 +167,7 @@ define(function(require){
                                msg :'Are you sure want to delete ?',
                                callback : function(){
                                        XAUtil.blockUI();
-                                       
+
                                        that.model.destroy({
                                                success: function(model, 
response) {
                                                        
XAUtil.blockUI('unblock');
@@ -182,7 +184,7 @@ define(function(require){
                                                        }
                                                }
                                        });
-                                       
+
                                }
                        });
                },
@@ -242,7 +244,7 @@ define(function(require){
                                                         
XAUtil.defaultErrorHandler(options , msResponse);
                                                 }
                                                bootbox.alert("Connection 
Failed.");
-                                       }       
+                                       }
                                });
                },
                gotoResourceOrTagTab : function(){

http://git-wip-us.apache.org/repos/asf/ranger/blob/a2de0ebf/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 079ce00..726fb5f 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
@@ -1,4 +1,4 @@
-       /*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,14 +17,14 @@
  * under the License.
  */
 
- 
+
 define(function(require){
     'use strict';
 
        var Backbone            = require('backbone');
        var XAEnums                     = require('utils/XAEnums');
        var XAUtil                      = require('utils/XAUtils');
-       
+
        var localization        = require('utils/XALangSupport');
        var BackboneFormDataType        = 
require('models/BackboneFormDataType');
        var ConfigurationList           = 
require('views/service/ConfigurationList')
@@ -52,7 +52,7 @@ define(function(require){
                                  serviceDetail += name+",";
                          }
                        });
-                       
+
                        return {
                                serviceDetail : serviceDetail.slice(0,-1),
                                serviceConfig : serviceConfig.slice(0,-1)
@@ -124,7 +124,7 @@ define(function(require){
                                } else {
                                        
this.fields.isEnabled.editor.setValue(XAEnums.ActiveStatus.STATUS_DISABLED.value);
                                }
-                       }       
+                       }
                },
                evIsEnabledChange : function(form, fieldEditor){
                        XAUtil.checkDirtyFieldForToggle(fieldEditor.$el);
@@ -143,8 +143,22 @@ define(function(require){
                },
 
                formValidation : function(){
-                       //return false;
-                       return true;
+                       var valid = true;
+                       var config = {};
+                       this.extraConfigColl.each(function(obj){
+                               if(!_.isEmpty(obj.attributes)) {
+                                       if 
(!_.isUndefined(config[obj.get('name')])) {
+                                               XAUtil.alertPopup({
+                                                       msg : 
localization.tt('msg.duplicateNewConfigValidationMsg')
+                                               });
+                                               valid = false;
+                                               return;
+                                       } else {
+                                               config[obj.get('name')] = 
obj.get('value');
+                                       }
+                               }
+                       });
+                       return valid;
                },
 
                beforeSave : function(){
@@ -165,11 +179,11 @@ define(function(require){
                                        }
                                });
                        }
-                       this.extraConfigColl.each(function(obj){ 
+                       this.extraConfigColl.each(function(obj){
                                if(!_.isEmpty(obj.attributes)) 
config[obj.get('name')] = obj.get('value');
                        });
-                       this.model.set('configs',config);       
-                       
+                       this.model.set('configs',config);
+
                        //Set service type
                        
this.model.set('type',this.rangerServiceDefModel.get('name'))
                        //Set isEnabled
@@ -178,7 +192,7 @@ define(function(require){
                        } else {
                                this.model.set('isEnabled',false);
                        }
-                       
+
                        //Remove unwanted attributes from model
                        if(!this.model.isNew()){
                                _.each(this.model.attributes.configs, 
function(value, name){

Reply via email to