AMBARI-19814. 'num_llap_nodes' should show up as non-editable property when non-ambari managed queue is selected (onechiporenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b55ba18e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b55ba18e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b55ba18e Branch: refs/heads/branch-dev-patch-upgrade Commit: b55ba18edd107a9439e24aafbe2167a76916b07f Parents: 4e689af Author: Oleg Nechiporenko <onechipore...@apache.org> Authored: Wed Feb 1 11:43:37 2017 +0200 Committer: Oleg Nechiporenko <onechipore...@apache.org> Committed: Wed Feb 1 13:15:45 2017 +0200 ---------------------------------------------------------------------- ambari-web/app/mixins.js | 1 + .../configs/widgets/unique/num_llap_nodes.js | 70 ++++++++++++++++++++ .../common/configs/widgets/controls.hbs | 2 + .../configs/service_config_layout_tab_view.js | 23 ++++++- 4 files changed, 93 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/mixins.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mixins.js b/ambari-web/app/mixins.js index 7b4d6b4..9d833b5 100644 --- a/ambari-web/app/mixins.js +++ b/ambari-web/app/mixins.js @@ -53,6 +53,7 @@ require('mixins/wizard/addSecurityConfigs'); require('mixins/wizard/wizard_menu_view'); require('mixins/wizard/assign_master_components'); require('mixins/wizard/wizardHostsLoading'); +require('mixins/common/configs/widgets/unique/num_llap_nodes'); require('mixins/common/configs/config_recommendations'); require('mixins/common/configs/config_recommendation_parser'); require('mixins/common/configs/config_with_override_recommendation_parser'); http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js b/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js new file mode 100644 index 0000000..a2df0fa --- /dev/null +++ b/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js @@ -0,0 +1,70 @@ +/** + * 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 + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +var App = require('app'); + +/** + * Slider for `num_llap_nodes` should have unique widget + * + * @type {Em.Mixin} + */ +App.NumLlapNodesWidgetMixin = Em.Mixin.create({ + + /** + * @type {boolean} + */ + readOnly: Em.computed.alias('config.stackConfigProperty.valueAttributes.read_only'), + + /** + * @type {boolean} + */ + doNotShowWidget: function () { + if (this.get('readOnly')) { + return false; + } + return this.get('isPropertyUndefined') || this.get('config.showAsTextBox'); + }.property('isPropertyUndefined', 'config.showAsTextBox', 'readOnly'), + + handleReadOnlyAttribute: function () { + var readOnly = this.get('readOnly'); + this.set('disabled', readOnly); + this.set('supportSwitchToTextBox', !readOnly); + if (readOnly) { + this.toggleSlider('disable'); + } + }.observes('readOnly'), + + toggleWidgetView: function() { + this._super(); + var action = !this.get('config.showAsTextBox') && this.get('readOnly') ? 'disable' : 'enable'; + this.toggleSlider(action); + }, + + toggleWidgetState: function () { + this.set('disabled', !this.get('config.isEditable')); + }.observes('config.isEditable'), + + toggleSlider: function (action) { + var self = this; + Em.run.next(function () { + self.get('slider')[action](); + }); + } + +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/templates/common/configs/widgets/controls.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/widgets/controls.hbs b/ambari-web/app/templates/common/configs/widgets/controls.hbs index 351d8ed..b7aff8e 100644 --- a/ambari-web/app/templates/common/configs/widgets/controls.hbs +++ b/ambari-web/app/templates/common/configs/widgets/controls.hbs @@ -33,6 +33,7 @@ {{/unless}} {{/if}} {{#if view.canEdit}} + {{#unless view.readOnly}} <div {{bindAttr class=":widget-config-controls view.referToSelectedGroup::clear-min-height"}}> <div {{bindAttr class=":widget-col :left view.config.isNotDefaultValue::hidden"}}> <a href="#" @@ -98,6 +99,7 @@ {{/if}} </div> </div> + {{/unless}} {{/if}} {{#if controller.selectedConfigGroup.isDefault}} http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/views/common/configs/service_config_layout_tab_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js index 30ffadf..466a88d 100644 --- a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js +++ b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js @@ -67,6 +67,10 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, { 'test-db-connection': App.TestDbConnectionWidgetView }, + configNameWidgetMixinMap: { + num_llap_nodes: App.NumLlapNodesWidgetMixin + }, + /** * Prepare configs for render * <code>subsection.configs</code> is an array of App.StackConfigProperty, but not App.ConfigProperty, @@ -108,9 +112,9 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, { if (!configProperty) return; containerObject.get('configs').pushObject(configProperty); - var configWidgetType = Em.get(config, 'widgetType'); - var widget = self.get('widgetTypeMap')[configWidgetType]; - Em.assert('Unknown config widget view for config ' + configProperty.get('id') + ' with type ' + configWidgetType, widget); + + var widget = self.getWidgetView(config); + Em.assert('Unknown config widget view for config ' + configProperty.get('id') + ' with type ' + Em.get(config, 'widgetType'), widget); var additionalProperties = { widget: widget, @@ -161,6 +165,19 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, { }, /** + * + * @param {object} config + * @returns {Em.View} + */ + getWidgetView: function (config) { + var configWidgetType = Em.get(config, 'widgetType'); + var name = Em.get(config, 'name'); + var mixin = this.get('configNameWidgetMixinMap')[name]; + var viewClass = this.get('widgetTypeMap')[configWidgetType]; + return Em.isNone(mixin) ? viewClass : viewClass.extend(mixin); + }, + + /** * changes active subsection tab * @param event */