Repository: ambari
Updated Branches:
  refs/heads/trunk 6cf98ff4a -> a5716364c


AMBARI-7640 Validation required for adding a Group Name (nandat via jaoki)


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

Branch: refs/heads/trunk
Commit: a5716364cba4cbbd58c55d915b3ac0e86433dca3
Parents: 6cf98ff
Author: Jun Aoki <[email protected]>
Authored: Mon Oct 13 17:13:02 2014 -0700
Committer: Jun Aoki <[email protected]>
Committed: Mon Oct 13 17:13:02 2014 -0700

----------------------------------------------------------------------
 ambari-web/app/assets/test/tests.js               |  1 +
 .../service/manage_config_groups_controller.js    | 15 ++++++++++++---
 ambari-web/app/messages.js                        |  1 +
 ambari-web/app/utils/validator.js                 | 10 ++++++++++
 ambari-web/test/utils/validator_test.js           | 18 ++++++++++++++++++
 5 files changed, 42 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js 
b/ambari-web/app/assets/test/tests.js
index 95e9073..74f8a4c 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -71,6 +71,7 @@ var files = ['test/init_model_test',
   'test/controllers/main/host/configs_service_test',
   'test/controllers/main/host/details_test',
   'test/controllers/main/service/add_controller_test',
+  'test/controllers/main/service/manage_config_groups_controller_test',
   'test/controllers/main/service/reassign_controller_test',
   'test/controllers/main/service/reassign/step2_controller_test',
   'test/controllers/main/service/reassign/step4_controller_test',

http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js 
b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
index 56c77f4..2110a87 100644
--- a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
+++ b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
@@ -18,6 +18,7 @@
 
 
 var App = require('app');
+var validator = require('utils/validator');
 var hostsManagement = require('utils/hosts');
 var numberUtils = require('utils/number_utils');
 
@@ -427,19 +428,23 @@ App.ManageConfigGroupsController = Em.Controller.extend({
       validate: function () {
         var warningMessage = '';
         var originalGroup = self.get('selectedConfigGroup');
+        var groupName = this.get('configGroupName').trim();
         if (originalGroup.get('description') !== this.get('configGroupDesc') 
&& !this.get('isDescriptionDirty')) {
           this.set('isDescriptionDirty', true);
         }
-        if (originalGroup.get('name').trim() === 
this.get('configGroupName').trim()) {
+        if (originalGroup.get('name').trim() === groupName) {
           if (this.get('isDescriptionDirty')) {
             warningMessage = '';
           } else {
             warningMessage = 
Em.I18n.t("config.group.selection.dialog.err.name.exists");
           }
         } else {
-          if 
(self.get('configGroups').mapProperty('name').contains(this.get('configGroupName').trim()))
 {
+          if 
(self.get('configGroups').mapProperty('name').contains(groupName)) {
             warningMessage = 
Em.I18n.t("config.group.selection.dialog.err.name.exists");
           }
+          else if (groupName && !validator.isValidConfigGroupName(groupName)) {
+            warningMessage = Em.I18n.t("form.validator.configGroupName");
+          }
         }
         this.set('warningMessage', warningMessage);
       }.observes('configGroupName', 'configGroupDesc'),
@@ -479,9 +484,13 @@ App.ManageConfigGroupsController = Em.Controller.extend({
       },
       validate: function () {
         var warningMessage = '';
-        if 
(self.get('configGroups').mapProperty('name').contains(this.get('configGroupName').trim()))
 {
+        var groupName = this.get('configGroupName').trim();
+        if (self.get('configGroups').mapProperty('name').contains(groupName)) {
           warningMessage = 
Em.I18n.t("config.group.selection.dialog.err.name.exists");
         }
+        else if (groupName && !validator.isValidConfigGroupName(groupName)) {
+          warningMessage = Em.I18n.t("form.validator.configGroupName");
+        }
         this.set('warningMessage', warningMessage);
       }.observes('configGroupName'),
       disablePrimary: function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index c8baad5..67eed85 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -816,6 +816,7 @@ Em.I18n.translations = {
 
   'form.validator.invalidIp':'Please enter valid ip address',
   'form.validator.configKey':'Invalid Key. Only alphanumerics, hyphens, 
underscores, asterisks and periods are allowed.',
+  'form.validator.configGroupName':'Invalid Group Name. Only alphanumerics, 
hyphens, spaces and underscores are allowed.',
   'form.validator.configKey.specific':'"{0}" is invalid Key. Only 
alphanumerics, hyphens, underscores, asterisks and periods are allowed.',
 
   'admin.advanced.caution':'This section is for advanced user 
only.<br/>Proceed with caution.',

http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/utils/validator.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/validator.js 
b/ambari-web/app/utils/validator.js
index 0b8afb2..0ba44ad 100644
--- a/ambari-web/app/utils/validator.js
+++ b/ambari-web/app/utils/validator.js
@@ -130,6 +130,16 @@ module.exports = {
     return configKeyRegex.test(value);
   },
 
+  /**
+   * validate configuration group name
+   * @param value
+   * @return {Boolean}
+   */
+  isValidConfigGroupName: function(value) {
+    var configKeyRegex = /^[\s0-9a-z_\-]+$/i;
+    return configKeyRegex.test(value);
+  },
+
   empty:function (e) {
     switch (e) {
       case "":

http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/test/utils/validator_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/validator_test.js 
b/ambari-web/test/utils/validator_test.js
index 79f11ac..a449b6a 100644
--- a/ambari-web/test/utils/validator_test.js
+++ b/ambari-web/test/utils/validator_test.js
@@ -332,6 +332,24 @@ describe('validator', function () {
       })
     });
   });
+  describe('#isValidConfigGroupName(value)', function() {
+    var tests = [
+      {m:'"123" - valid',i:'123',e:true},
+      {m:'"abc" - valid',i:'abc',e:true},
+      {m:'"abc123" - valid',i:'abc123',e:true},
+      {m:'".abc." - invalid',i:'.abc.',e:false},
+      {m:'"_abc_" - valid',i:'_abc_',e:true},
+      {m:'"-abc-" - valid',i:'-abc-',e:true},
+      {m:'" abc  123 " - valid',i:' abc  123 ',e:true},
+      {m:'"a"b" - invalid',i:'a"b',e:false},
+      {m:'"a\'b" - invalid',i:'a\'b',e:false}
+    ];
+    tests.forEach(function(test) {
+      it(test.m + ' ', function () {
+        expect(validator.isValidConfigGroupName(test.i)).to.equal(test.e);
+      })
+    });
+  });
 
   describe('#isValidMatchesRegexp()', function() {
     var message = '`{0}` should be {1}',

Reply via email to