소스 검색

AMBARI-9477 Allow "Yes" and "No" values for config checkbox. (ababiichuk)

aBabiichuk 10 년 전
부모
커밋
ecab2b40d4

+ 0 - 20
ambari-web/app/controllers/main/service/info/configs.js

@@ -998,7 +998,6 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
 
     var serviceConfigProperty = App.ServiceConfigProperty.create(_serviceConfigProperty);
 
-    this.setValueForCheckBox(serviceConfigProperty);
     this.setSupportsFinal(serviceConfigProperty);
     this.setValuesForOverrides(overrides, _serviceConfigProperty, serviceConfigProperty, defaultGroupSelected);
     this.setEditability(serviceConfigProperty, defaultGroupSelected);
@@ -1100,25 +1099,6 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
     return newSCP;
   },
 
-  /**
-   * convert string values to boolean for checkboxes
-   * @param {Ember.Object} serviceConfigProperty
-   */
-  setValueForCheckBox: function (serviceConfigProperty) {
-    if (serviceConfigProperty.get("displayType") == 'checkbox') {
-      switch (serviceConfigProperty.get("value")) {
-        case 'true':
-          serviceConfigProperty.set("value", true);
-          serviceConfigProperty.set("defaultValue", true);
-          break;
-        case 'false':
-          serviceConfigProperty.set("value", false);
-          serviceConfigProperty.set("defaultValue", false);
-          break;
-      }
-    }
-  },
-
   /**
    * Initialize save configs popup
    */

+ 0 - 25
ambari-web/app/controllers/wizard/step7_controller.js

@@ -397,28 +397,6 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, {
     service.set('configs', serviceConfig.get('configs'));
   },
 
-  /**
-   * By default <code>value</code>-property is string "true|false".
-   * Should update it to boolean type
-   * Also affects <code>defaultValue</code>
-   * @param {Ember.Object} serviceConfigProperty
-   * @returns {Ember.Object} Updated config-object
-   * @method _updateValueForCheckBoxConfig
-   */
-  _updateValueForCheckBoxConfig: function (serviceConfigProperty) {
-    var v = serviceConfigProperty.get('value');
-    switch (serviceConfigProperty.get('value')) {
-      case 'true':
-        v = true;
-        break;
-      case 'false':
-        v = false;
-        break;
-    }
-    serviceConfigProperty.setProperties({value: v, defaultValue: v});
-    return serviceConfigProperty;
-  },
-
   /**
    * Set <code>isEditable</code>-property to <code>serviceConfigProperty</code>
    * Based on user's permissions and selected config group
@@ -503,9 +481,6 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, {
       if (Em.isNone(serviceConfigProperty.get('isOverridable'))) {
         serviceConfigProperty.set('isOverridable', true);
       }
-      if (serviceConfigProperty.get('displayType') === 'checkbox') {
-        this._updateValueForCheckBoxConfig(serviceConfigProperty);
-      }
       this._updateOverridesForConfig(serviceConfigProperty, component);
       this._updateIsEditableFlagForConfig(serviceConfigProperty, defaultGroupSelected);
 

+ 5 - 5
ambari-web/app/data/HDP2.2/site_properties.js

@@ -134,7 +134,7 @@ hdp22properties.push(
   {
     "id": "site property",
     "name": "ranger-hdfs-plugin-enabled",
-    "defaultValue": "no",
+    "displayType": "checkbox",
     "displayName": "Enable Ranger for HDFS",
     "filename": "ranger-hdfs-plugin-properties.xml",
     "category": "RangerSettings",
@@ -189,7 +189,7 @@ hdp22properties.push(
   {
     "id": "site property",
     "name": "ranger-hive-plugin-enabled",
-    "defaultValue": "no",
+    "displayType": "checkbox",
     "displayName": "Enable Ranger for HIVE",
     "filename": "ranger-hive-plugin-properties.xml",
     "category": "RangerSettings",
@@ -254,7 +254,7 @@ hdp22properties.push(
   {
     "id": "site property",
     "name": "ranger-hbase-plugin-enabled",
-    "defaultValue": "no",
+    "displayType": "checkbox",
     "displayName": "Enable Ranger for HBASE",
     "filename": "ranger-hbase-plugin-properties.xml",
     "category": "RangerSettings",
@@ -319,7 +319,7 @@ hdp22properties.push(
   {
     "id": "site property",
     "name": "ranger-storm-plugin-enabled",
-    "defaultValue": "no",
+    "displayType": "checkbox",
     "displayName": "Enable Ranger for STORM",
     "filename": "ranger-storm-plugin-properties.xml",
     "category": "RangerSettings",
@@ -374,7 +374,7 @@ hdp22properties.push(
   {
     "id": "site property",
     "name": "ranger-knox-plugin-enabled",
-    "defaultValue": "no",
+    "displayType": "checkbox",
     "displayName": "Enable Ranger for KNOX",
     "filename": "ranger-knox-plugin-properties.xml",
     "category": "RangerSettings",

+ 1 - 18
ambari-web/app/utils/config.js

@@ -247,9 +247,6 @@ App.config = Em.Object.create({
       config.value = config.value.slice(0, config.value.length - 1);
       config.defaultValue = config.value;
     }
-    if (config.displayType === 'checkbox') {
-      config.value = (config.value === 'true') ? config.defaultValue = true : config.defaultValue = false;
-    }
   },
   /**
    * calculate config properties:
@@ -522,11 +519,6 @@ App.config = Em.Object.create({
           }
         }
 
-        if (configData.displayType === 'checkbox') {
-          configData.value = configData.value === 'true'; // convert {String} value to {Boolean}
-          configData.defaultValue = configData.value;
-        }
-
         mergedConfigs.push(configData);
       } else {
         preDefinedCfgs.forEach(function (cfg) {
@@ -563,9 +555,7 @@ App.config = Em.Object.create({
     // Password fields should be made blank by default in installer wizard
     // irrespective of whatever value is sent from stack definition.
     // This forces the user to fill the password field.
-    if (configData.displayType == 'checkbox') {
-      configData.value = advanced ? advanced.value === 'true' : configData.value === 'true';
-    } else if (configData.displayType == 'password') {
+    if (configData.displayType == 'password') {
       configData.value = '';
     } else {
       configData.value = advanced ? advanced.value : configData.value;
@@ -1137,13 +1127,6 @@ App.config = Em.Object.create({
       if (/\d+m$/.test(hostOverrideValue)) {
         return hostOverrideValue.slice(0, hostOverrideValue.length - 1);
       }
-    } else if (serviceConfig && serviceConfig.displayType === 'checkbox') {
-      switch (hostOverrideValue) {
-        case 'true':
-          return true;
-        case 'false':
-          return false;
-      }
     }
     return hostOverrideValue;
   },

+ 56 - 1
ambari-web/app/views/common/controls_view.js

@@ -203,7 +203,62 @@ App.ServiceConfigBigTextArea = App.ServiceConfigTextArea.extend(App.ServiceConfi
  */
 App.ServiceConfigCheckbox = Ember.Checkbox.extend(App.ServiceConfigPopoverSupport, App.ServiceConfigCalculateId, {
 
-  checkedBinding: 'serviceConfig.value',
+  allowedPairs: {
+    'trueFalse': ["true", "false"],
+    'YesNo': ["Yes", "No"],
+    'YESNO': ["YES", "NO"],
+    'yesNo': ["yes", "no"]
+  },
+
+  trueValue: true,
+  falseValue: false,
+
+  checked: false,
+
+  /**
+   * set appropriate config values pair
+   * to define which value is positive (checked) property
+   * and what value is negative (unchecked) proeprty
+   */
+  didInsertElement: function() {
+    this._super();
+    this.addObserver('serviceConfig.value', this, 'toggleChecker');
+    Object.keys(this.get('allowedPairs')).forEach(function(key) {
+      if (this.get('allowedPairs')[key].contains(this.get('serviceConfig.value'))) {
+        this.set('trueValue', this.get('allowedPairs')[key][0]);
+        this.set('falseValue', this.get('allowedPairs')[key][1]);
+      }
+    }, this);
+    this.set('checked', this.get('serviceConfig.value') === this.get('trueValue'))
+  },
+
+  willDestroyElement: function() {
+    this.removeObserver('serviceConfig.value', this, 'checkedBinding');
+  },
+
+  /***
+   * defines if checkbox value appropriate to the config value
+   * @returns {boolean}
+   */
+  isNotAppropriateValue: function() {
+    return this.get('serviceConfig.value') !== this.get(this.get('checked') + 'Value');
+  },
+
+  /**
+   * change service config value if click on checkbox
+   */
+  toggleValue: function() {
+    if (this.isNotAppropriateValue())
+      this.set('serviceConfig.value', this.get(this.get('checked') + 'Value'));
+  }.observes('checked'),
+
+  /**
+   * change checkbox value if click on undo
+   */
+  toggleChecker: function() {
+    if (this.isNotAppropriateValue())
+      this.set('checked', !this.get('checked'));
+  },
 
   disabled: function () {
     return !this.get('serviceConfig.isEditable');

+ 0 - 49
ambari-web/test/controllers/main/service/info/config_test.js

@@ -968,52 +968,6 @@ describe("App.MainServiceInfoConfigsController", function () {
     });
   });
 
-  describe("#setValueForCheckBox", function() {
-    var tests = [
-      {
-        serviceConfigPropertyInput: Em.Object.create({
-          value: "true",
-          defaultValue: "true",
-          displayType: 'checkbox'
-        }),
-        serviceConfigProperty: Em.Object.create({
-          value: true,
-          defaultValue: true,
-          displayType: 'checkbox'
-        })
-      },
-      {
-        serviceConfigPropertyInput: Em.Object.create({
-          value: "false",
-          defaultValue: "false",
-          displayType: 'checkbox'
-        }),
-        serviceConfigProperty: Em.Object.create({
-          value: false,
-          defaultValue: false,
-          displayType: 'checkbox'
-        })
-      },
-      {
-        serviceConfigPropertyInput: Em.Object.create({
-          value: "false",
-          defaultValue: "false"
-        }),
-        serviceConfigProperty: Em.Object.create({
-          value: "false",
-          defaultValue: "false"
-        })
-      }
-    ];
-    tests.forEach(function(t) {
-      it("set " + t.serviceConfigPropertyInput.value, function(){
-        var serviceConfigProperty = t.serviceConfigPropertyInput;
-        mainServiceInfoConfigsController.setValueForCheckBox(serviceConfigProperty);
-        expect(serviceConfigProperty).to.eql(t.serviceConfigProperty);
-      });
-    });
-  });
-
   describe("#setEditability", function () {
 
     var tests = [
@@ -1211,19 +1165,16 @@ describe("App.MainServiceInfoConfigsController", function () {
         }
       }];
     beforeEach(function() {
-      sinon.stub(mainServiceInfoConfigsController, "setValueForCheckBox", Em.K);
       sinon.stub(mainServiceInfoConfigsController, "setValuesForOverrides", Em.K);
       sinon.stub(mainServiceInfoConfigsController, "setEditability", Em.K);
     });
     afterEach(function() {
-      mainServiceInfoConfigsController.setValueForCheckBox.restore();
       mainServiceInfoConfigsController.setValuesForOverrides.restore();
       mainServiceInfoConfigsController.setEditability.restore();
     });
     tests.forEach(function(t) {
       it("create service config. run methods to correctly set object fileds", function() {
         var result = mainServiceInfoConfigsController.createConfigProperty(t._serviceConfigProperty, t.defaultGroupSelected, t.restartData, t.serviceConfigsData);
-        expect(mainServiceInfoConfigsController.setValueForCheckBox.calledWith(t.serviceConfigProperty));
         expect(mainServiceInfoConfigsController.setValuesForOverrides.calledWith(t._serviceConfigProperty.overrides, t._serviceConfigProperty, t.serviceConfigProperty, t.defaultGroupSelected));
         expect(result.getProperties('overrides','isOverridable')).to.eql(t.serviceConfigProperty);
       });

+ 0 - 20
ambari-web/test/controllers/wizard/step7_test.js

@@ -1172,26 +1172,6 @@ describe('App.InstallerStep7Controller', function () {
     });
   });
 
-  describe('#_updateValueForCheckBoxConfig', function () {
-    Em.A([
-        {
-          v: 'true',
-          e: true
-        },
-        {
-          v: 'false',
-          e: false
-        }
-      ]).forEach(function (test) {
-        it(test.v, function () {
-          var serviceConfigProperty = Em.Object.create({value: test.v});
-          installerStep7Controller._updateValueForCheckBoxConfig(serviceConfigProperty);
-          expect(serviceConfigProperty.get('value')).to.equal(test.e);
-          expect(serviceConfigProperty.get('defaultValue')).to.equal(test.e);
-        });
-      });
-  });
-
   describe('#_updateIsEditableFlagForConfig', function () {
     beforeEach(function(){
       this.mock = sinon.stub(App, 'isAccessible');

+ 0 - 20
ambari-web/test/utils/config_test.js

@@ -72,26 +72,6 @@ describe('App.config', function () {
       expect(config.value).to.equal('1024');
       expect(config.defaultValue).to.equal('1024');
     });
-    it('value should be transformed to true from "true"', function () {
-      config = {
-        displayType: 'checkbox',
-        value: 'true',
-        defaultValue: 'true'
-      };
-      App.config.handleSpecialProperties(config);
-      expect(config.value).to.equal(true);
-      expect(config.defaultValue).to.equal(true);
-    });
-    it('value should be transformed to false from "false"', function () {
-      config = {
-        displayType: 'checkbox',
-        value: 'false',
-        defaultValue: 'false'
-      };
-      App.config.handleSpecialProperties(config);
-      expect(config.value).to.equal(false);
-      expect(config.defaultValue).to.equal(false);
-    });
   });
 
   describe('#capacitySchedulerFilter', function() {