Browse Source

AMBARI-12722. Final button is absent for Custom core -site properties (alexantonenko)

Alex Antonenko 10 năm trước cách đây
mục cha
commit
51ea0ec32f

+ 1 - 1
ambari-web/app/controllers/wizard.js

@@ -859,7 +859,7 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
       }
 
       _content.get('configs').forEach(function (_configProperties) {
-        var configProperty = App.config.createDefaultConfig(_configProperties.get('name'), _configProperties.get('filename'), _configProperties.get('isUserProperty'), {value: _configProperties.get('value')});
+        var configProperty = App.config.createDefaultConfig(_configProperties.get('name'), _configProperties.get('serviceName'), _configProperties.get('filename'), _configProperties.get('isUserProperty'), {value: _configProperties.get('value')});
         configProperty = App.config.mergeStaticProperties(configProperty, _configProperties, ['name', 'filename']);
 
         if (this.isExcludedConfig(configProperty)) {

+ 8 - 6
ambari-web/app/utils/config.js

@@ -304,7 +304,7 @@ App.config = Em.Object.create({
         var configsPropertyDef = this.get('preDefinedSitePropertiesMap')[id];
         var advancedConfig = App.StackConfigProperty.find(id);
         var isStackProperty = !!advancedConfig.get('id');
-        var template = this.createDefaultConfig(index, filename, isStackProperty, configsPropertyDef);
+        var template = this.createDefaultConfig(index, serviceName, filename, isStackProperty, configsPropertyDef);
         var serviceConfigObj = isStackProperty ? this.mergeStaticProperties(template, advancedConfig) : template;
 
         if (serviceConfigObj.isRequiredByAgent !== false) {
@@ -332,12 +332,13 @@ App.config = Em.Object.create({
    * These property values has the lowest priority and can be overriden be stack/UI
    * config property but is used when such properties are absent in stack/UI configs
    * @param {string} name
+   * @param {string} serviceName
    * @param {string} fileName
    * @param {boolean} definedInStack
    * @param {Object} [coreObject]
    * @returns {Object}
    */
-  createDefaultConfig: function(name, fileName, definedInStack, coreObject) {
+  createDefaultConfig: function(name, serviceName, fileName, definedInStack, coreObject) {
     return $.extend({
       /** core properties **/
       name: name,
@@ -349,8 +350,8 @@ App.config = Em.Object.create({
       /** UI and Stack properties **/
       recommendedValue: null,
       recommendedIsFinal: null,
-      supportsFinal: false,
-      serviceName: 'MISC',
+      supportsFinal: this.shouldSupportFinal(serviceName, fileName),
+      serviceName: serviceName,
       defaultDirectory: '',
       displayName: this.getDefaultDisplayName(name, fileName),
       displayType: this.getDefaultDisplayType(name, fileName, coreObject ? coreObject.value : ''),
@@ -595,8 +596,9 @@ App.config = Em.Object.create({
       if (!(uiPersistentProperties.contains(id) || isUIOnly || advanced.get('id')) && filename != 'alert_notification') {
         return;
       }
+      var serviceName = preDefined ? preDefined.serviceName : advanced.get('serviceName');
       if (configTypes.contains(this.getConfigTagFromFileName(filename))) {
-        var configData = this.createDefaultConfig(name, filename, true, preDefined || {});
+        var configData = this.createDefaultConfig(name, serviceName, filename, true, preDefined || {});
         if (configData.recommendedValue) {
           configData.value = configData.recommendedValue;
         }
@@ -1120,7 +1122,7 @@ App.config = Em.Object.create({
         isVisible: stored.isVisible,
         isFinal: stored.isFinal,
         savedIsFinal: stored.savedIsFinal,
-        supportsFinal: stored.supportsFinal,
+        supportsFinal: this.shouldSupportFinal(stored.serviceName, stored.filename),
         showLabel: stored.showLabel !== false,
         category: stored.category
       };

+ 2 - 0
ambari-web/test/controllers/wizard_test.js

@@ -916,10 +916,12 @@ describe('App.WizardController', function () {
     beforeEach(function () {
       c.set('content', {});
       sinon.stub(c, 'setDBProperty', Em.K);
+      sinon.stub(App.config, 'shouldSupportFinal').returns(true);
     });
 
     afterEach(function () {
       c.setDBProperty.restore();
+      App.config.shouldSupportFinal.restore();
     });
 
     var kerberosStepController = Em.Object.create({

+ 9 - 4
ambari-web/test/utils/config_test.js

@@ -1212,6 +1212,9 @@ describe('App.config', function () {
       sinon.stub(App.config, 'getDefaultIsShowLabel', function() {
         return true;
       });
+      sinon.stub(App.config, 'shouldSupportFinal', function() {
+        return true;
+      });
     });
 
     after(function() {
@@ -1220,6 +1223,7 @@ describe('App.config', function () {
       App.config.getDefaultCategory.restore();
       App.config.getIsSecure.restore();
       App.config.getDefaultIsShowLabel.restore();
+      App.config.shouldSupportFinal.restore();
     });
 
     var res = {
@@ -1233,8 +1237,8 @@ describe('App.config', function () {
       /** UI and Stack properties **/
       recommendedValue: null,
       recommendedIsFinal: null,
-      supportsFinal: false,
-      serviceName: 'MISC',
+      supportsFinal: true,
+      serviceName: 'pServiceName',
       defaultDirectory: '',
       displayName: 'pDisplayName',
       displayType: 'pDisplayType',
@@ -1259,8 +1263,8 @@ describe('App.config', function () {
       radioName: null,
       belongsToService: []
     };
-    it('create default config object', function() {
-      expect(App.config.createDefaultConfig('pName','pFileName', true)).to.eql(res);
+    it('create default config object', function () {
+      expect(App.config.createDefaultConfig('pName', 'pServiceName', 'pFileName', true)).to.eql(res);
     });
     it('runs proper methods', function() {
       expect(App.config.getDefaultDisplayName.calledWith('pName','pFileName')).to.be.true;
@@ -1268,6 +1272,7 @@ describe('App.config', function () {
       expect(App.config.getDefaultCategory.calledWith(true, 'pFileName')).to.be.true;
       expect(App.config.getIsSecure.calledWith('pName')).to.be.true;
       expect(App.config.getDefaultIsShowLabel.calledWith('pName', 'pFileName')).to.be.true;
+      expect(App.config.shouldSupportFinal.calledWith('pServiceName', 'pFileName')).to.be.true;
     });
   });