You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2015/10/22 04:09:47 UTC
ambari git commit: AMBARI-13481. Ranger User Info tab: All subsequent
subsection and their configs should be hidden if Ranger Usersync is disabled.
(jaimin)
Repository: ambari
Updated Branches:
refs/heads/branch-2.1 7d7ae0a0d -> e1395dac7
AMBARI-13481. Ranger User Info tab: All subsequent subsection and their configs should be hidden if Ranger Usersync is disabled. (jaimin)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e1395dac
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e1395dac
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e1395dac
Branch: refs/heads/branch-2.1
Commit: e1395dac7db26b0dcf072656acd397e38b62c8e6
Parents: 7d7ae0a
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Tue Oct 20 11:33:01 2015 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Wed Oct 21 19:09:11 2015 -0700
----------------------------------------------------------------------
ambari-web/app/mappers/configs/themes_mapper.js | 62 +++++++++++++---
ambari-web/app/models.js | 2 +-
.../app/models/configs/config_condition.js | 65 -----------------
.../app/models/configs/theme/sub_section.js | 9 ++-
.../app/models/configs/theme/sub_section_tab.js | 9 ++-
.../app/models/configs/theme/theme_condition.js | 76 ++++++++++++++++++++
.../configs/service_config_layout_tab_view.js | 3 +-
.../configs/widgets/config_widget_view.js | 30 +++++++-
8 files changed, 172 insertions(+), 84 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/ambari-web/app/mappers/configs/themes_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/themes_mapper.js b/ambari-web/app/mappers/configs/themes_mapper.js
index fff2013..0a55068 100644
--- a/ambari-web/app/mappers/configs/themes_mapper.js
+++ b/ambari-web/app/mappers/configs/themes_mapper.js
@@ -22,7 +22,7 @@ App.themesMapper = App.QuickDataMapper.create({
sectionModel: App.Section,
subSectionModel: App.SubSection,
subSectionTabModel: App.SubSectionTab,
- configConditionModel: App.ConfigCondition,
+ themeConditionModel: App.ThemeCondition,
tabConfig: {
"id": "name",
@@ -107,27 +107,40 @@ App.themesMapper = App.QuickDataMapper.create({
if (section.subsections) {
var subSections = [];
+ var subSectionConditions = [];
section.subsections.forEach(function(subSection) {
var parsedSubSection = this.parseIt(subSection, this.get("subSectionConfig"));
parsedSubSection.section_id = parsedSection.id;
if (subSection['subsection-tabs']) {
var subSectionTabs = [];
+ var subSectionTabConditions = [];
subSection['subsection-tabs'].forEach(function (subSectionTab) {
var parsedSubSectionTab = this.parseIt(subSectionTab, this.get("subSectionTabConfig"));
parsedSubSectionTab.sub_section_id = parsedSubSection.id;
-
+ if (parsedSubSectionTab['depends_on']) {
+ subSectionTabConditions.push(parsedSubSectionTab);
+ }
subSectionTabs.push(parsedSubSectionTab);
}, this);
subSectionTabs[0].is_active = true;
-
+ if (subSectionTabConditions.length) {
+ var type = 'subsectionTab';
+ this.mapThemeConditions(subSectionTabConditions, type);
+ }
App.store.loadMany(this.get("subSectionTabModel"), subSectionTabs);
parsedSubSection.sub_section_tabs = subSectionTabs.mapProperty("id");
}
-
+ if (parsedSubSection['depends_on']) {
+ subSectionConditions.push(parsedSubSection);
+ }
subSections.push(parsedSubSection);
}, this);
+ if (subSectionConditions.length) {
+ var type = 'subsection';
+ this.mapThemeConditions(subSectionConditions, type);
+ }
App.store.loadMany(this.get("subSectionModel"), subSections);
parsedSection.sub_sections = subSections.mapProperty("id");
}
@@ -159,15 +172,12 @@ App.themesMapper = App.QuickDataMapper.create({
var subSectionTabId = configLink["subsection-tab-name"];
if (subSectionTabId) {
var subSectionTab = App.SubSectionTab.find(subSectionTabId);
- var subSectionTabDependsOnConfigs = subSectionTab.get('dependsOn');
} else if (subSectionId) {
var subSection = App.SubSection.find(subSectionId);
- var subSectionDependsOnConfigs = subSection.get('dependsOn');
}
var configProperty = App.StackConfigProperty.find(configId);
- var configDependsOnOtherConfigs = configLink["depends-on"] || [];
- var dependsOnConfigs = configDependsOnOtherConfigs.concat(subSectionDependsOnConfigs || []).concat(subSectionTabDependsOnConfigs || []);
+ var dependsOnConfigs = configLink["depends-on"] || [];
if (configProperty.get('id') && subSection) {
subSection.get('configProperties').pushObject(configProperty);
@@ -181,7 +191,7 @@ App.themesMapper = App.QuickDataMapper.create({
if (valueAttributes) {
var isUiOnlyProperty = valueAttributes["ui_only_property"];
// UI only configs are mentioned in the themes for supporting widgets that is not intended for setting a value
- // And thus is affiliated witha fake config peperty termed as ui only config property
+ // And thus is affiliated with fake config property termed as ui only config property
if (isUiOnlyProperty && subSection) {
var split = configLink.config.split("/");
var fileName = split[0] + '.xml';
@@ -237,11 +247,43 @@ App.themesMapper = App.QuickDataMapper.create({
}
configCondition.resource = _configCondition.resource || 'config';
+ configCondition.type = _configCondition.type || 'config';
configConditionsCopy.pushObject(configCondition);
}, this);
- App.store.loadMany(this.get("configConditionModel"), configConditionsCopy);
+ App.store.loadMany(this.get("themeConditionModel"), configConditionsCopy);
+ App.store.commit();
+ },
+
+ /**
+ *
+ * @param subSections: Array
+ * @param type: {String} possible values: `subsection` or `subsectionTab`
+ */
+ mapThemeConditions: function(subSections, type) {
+ var subSectionConditionsCopy = [];
+ subSections.forEach(function(_subSection){
+ var subSectionConditions = _subSection['depends_on'];
+ subSectionConditions.forEach(function(_subSectionCondition, index){
+ var subSectionCondition = $.extend({},_subSectionCondition);
+ subSectionCondition.id = _subSection.id + '_' + index;
+ subSectionCondition.name = _subSection.name;
+ if (_subSectionCondition.configs && _subSectionCondition.configs.length) {
+ subSectionCondition.configs = _subSectionCondition.configs.map(function (item) {
+ var result = {};
+ result.fileName = item.split('/')[0] + '.xml';
+ result.configName = item.split('/')[1];
+ return result;
+ });
+ }
+
+ subSectionCondition.resource = _subSectionCondition.resource || 'config';
+ subSectionCondition.type = _subSectionCondition.type || type;
+ subSectionConditionsCopy.pushObject(subSectionCondition);
+ }, this);
+ }, this);
+ App.store.loadMany(this.get("themeConditionModel"), subSectionConditionsCopy);
App.store.commit();
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/ambari-web/app/models.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models.js b/ambari-web/app/models.js
index 5d5cdd0..b607bee 100644
--- a/ambari-web/app/models.js
+++ b/ambari-web/app/models.js
@@ -61,7 +61,7 @@ require('models/config_group');
require('models/host_stack_version');
require('models/root_service');
require('models/upgrade_entity');
-require('models/configs/config_condition');
+require('models/configs/theme/theme_condition');
require('models/configs/service_config_version');
require('models/configs/stack_config_property');
require('models/configs/config_group');
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/ambari-web/app/models/configs/config_condition.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/config_condition.js b/ambari-web/app/models/configs/config_condition.js
deleted file mode 100644
index f978424..0000000
--- a/ambari-web/app/models/configs/config_condition.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 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.
- */
-
-/**
- * THIS IS NOT USED FOR NOW
- * FOR CONFIG GROUPS WE ARE USING OLD MODELS AND LOGIC
- */
-
-var App = require('app');
-
-App.ConfigCondition = DS.Model.extend({
- /**
- * unique id generated as <code>config_name<code><code>filename<code>
- * @property {string}
- */
- id: DS.attr('string'),
-
- /**
- * Name of the config that is being affected with the condition
- */
- configName: DS.attr('string'),
-
- /**
- * File name to which the config getting affected belongs
- */
- fileName: DS.attr('string'),
-
- /**
- * List of configs whose values affect the config
- * Each Object in an array consists of configName and fileName
- */
- configs: DS.attr('array', {defaultValue: []}),
-
- /**
- * resource can be `config`, `service`
- */
- resource: DS.attr('string', {defaultValue: 'config'}),
-
- /**
- * conditional String which can be evaluated to boolean result.
- * If evaluated result of this staring is true then use the statement provided by `then` attribute.
- * Otherwise use the attribute provided by `else` attributes
- */
- if: DS.attr('string'),
- then: DS.attr('object', {defaultValue: null}),
- else: DS.attr('object', {defaultValue: null})
-
-});
-
-App.ConfigCondition.FIXTURES = [];
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/ambari-web/app/models/configs/theme/sub_section.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/theme/sub_section.js b/ambari-web/app/models/configs/theme/sub_section.js
index 261d3b8..ed3c7a2 100644
--- a/ambari-web/app/models/configs/theme/sub_section.js
+++ b/ambari-web/app/models/configs/theme/sub_section.js
@@ -172,6 +172,11 @@ App.SubSection = DS.Model.extend({
}.property('columnIndex', 'columnSpan', 'section.sectionColumns'),
/**
+ * If the visibility of subsection is dependent on a value of some config
+ */
+ isHiddenByConfig: false,
+
+ /**
* Determines if subsection is filtered by checking it own configs
* If there is no configs, subsection can't be hidden
* @type {boolean}
@@ -186,8 +191,8 @@ App.SubSection = DS.Model.extend({
* @type {boolean}
*/
isSectionVisible: function () {
- return !this.get('isHiddenByFilter') && this.get('configs').someProperty('isVisible', true);
- }.property('isHiddenByFilter', 'configs.@each.isVisible')
+ return !this.get('isHiddenByFilter') && !this.get('isHiddenByConfig') && this.get('configs').someProperty('isVisible', true);
+ }.property('isHiddenByFilter', 'configs.@each.isVisible', 'isHiddenByConfig')
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/ambari-web/app/models/configs/theme/sub_section_tab.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/theme/sub_section_tab.js b/ambari-web/app/models/configs/theme/sub_section_tab.js
index bf7c015..ca42aeb 100644
--- a/ambari-web/app/models/configs/theme/sub_section_tab.js
+++ b/ambari-web/app/models/configs/theme/sub_section_tab.js
@@ -66,6 +66,11 @@ App.SubSectionTab = DS.Model.extend({
}.property('configs.@each.isVisible', 'configs.@each.isValid', 'configs.@each.overrideErrorTrigger'),
/**
+ * If the visibility of subsection is dependent on a value of some config
+ */
+ isHiddenByConfig: false,
+
+ /**
* Determines if subsection is filtered by checking it own configs
* If there is no configs, subsection can't be hidden
* @type {boolean}
@@ -80,8 +85,8 @@ App.SubSectionTab = DS.Model.extend({
* @type {boolean}
*/
isVisible: function () {
- return !this.get('isHiddenByFilter') && this.get('configs').someProperty('isVisible', true);
- }.property('isHiddenByFilter', 'configs.@each.isVisible')
+ return !this.get('isHiddenByFilter') && !this.get('isHiddenByConfig') && this.get('configs').someProperty('isVisible', true);
+ }.property('isHiddenByFilter', 'isHiddenByConfig', 'configs.@each.isVisible')
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/ambari-web/app/models/configs/theme/theme_condition.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/theme/theme_condition.js b/ambari-web/app/models/configs/theme/theme_condition.js
new file mode 100644
index 0000000..a77256a
--- /dev/null
+++ b/ambari-web/app/models/configs/theme/theme_condition.js
@@ -0,0 +1,76 @@
+/**
+ * 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.
+ */
+
+/**
+ * THIS IS NOT USED FOR NOW
+ * FOR CONFIG GROUPS WE ARE USING OLD MODELS AND LOGIC
+ */
+
+var App = require('app');
+
+App.ThemeCondition = DS.Model.extend({
+ /**
+ * unique id generated as <code>config_name<code><code>filename<code>
+ * @property {string}
+ */
+ id: DS.attr('string'),
+
+ /**
+ * type can be `config`, `service`
+ */
+ type: DS.attr('string'),
+
+ /**
+ * This is specific to subsection and subsectionTab type
+ */
+
+ name: DS.attr('string'),
+
+ /**
+ * Name of the config that is being affected with the condition
+ */
+ configName: DS.attr('string'),
+
+ /**
+ * File name to which the config getting affected belongs
+ */
+ fileName: DS.attr('string'),
+
+ /**
+ * List of configs whose values affect the config
+ * Each Object in an array consists of configName and fileName
+ */
+ configs: DS.attr('array', {defaultValue: []}),
+
+ /**
+ * resource can be `config`, `service`
+ */
+ resource: DS.attr('string', {defaultValue: 'config'}),
+
+ /**
+ * conditional String which can be evaluated to boolean result.
+ * If evaluated result of this staring is true then use the statement provided by `then` attribute.
+ * Otherwise use the attribute provided by `else` attributes
+ */
+ if: DS.attr('string'),
+ then: DS.attr('object', {defaultValue: null}),
+ else: DS.attr('object', {defaultValue: null})
+
+});
+
+App.ThemeCondition.FIXTURES = [];
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/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 720dd12..1aec1fa 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
@@ -119,8 +119,7 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
stackConfigProperty: config
};
-
- var configConditions = App.ConfigCondition.find().filter(function (_configCondition) {
+ var configConditions = App.ThemeCondition.find().filter(function (_configCondition) {
// Filter config condition depending on the value of another config
var conditionalConfigs = (_configCondition.get('configs')||[]).filterProperty('fileName', config.get('filename')).filterProperty('configName', config.get('name'));
// Filter config condition depending on the service existence or service state
http://git-wip-us.apache.org/repos/asf/ambari/blob/e1395dac/ambari-web/app/views/common/configs/widgets/config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/config_widget_view.js b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
index b3e806f..9e120ce 100644
--- a/ambari-web/app/views/common/configs/widgets/config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
@@ -430,7 +430,11 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
}
}, this);
isConditionTrue = window.eval(allConditionResult.join(''));
- this.changeConfigAttribute(configCondition, isConditionTrue);
+ if (configCondition.get("type") === 'subsection' || configCondition.get("type") === 'subsectionTab') {
+ this.changeSubsectionAttribute(configCondition, isConditionTrue);
+ } else {
+ this.changeConfigAttribute(configCondition, isConditionTrue);
+ }
} else if (configCondition.get("resource") === 'service') {
var service = App.Service.find().findProperty('serviceName', ifStatement);
var serviceName;
@@ -449,7 +453,7 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
/**
*
- * @param configCondition {App.ConfigCondition}
+ * @param configCondition {App.ThemeCondition}
* @param isConditionTrue {boolean}
*/
changeConfigAttribute: function(configCondition, isConditionTrue) {
@@ -470,6 +474,28 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
}
},
+ /**
+ *
+ * @param subsectionCondition {App.ThemeCondition}
+ * @param isConditionTrue {boolean}
+ */
+ changeSubsectionAttribute: function(subsectionCondition, isConditionTrue) {
+ var subsectionConditionName = subsectionCondition.get('name');
+ var action = isConditionTrue ? subsectionCondition.get("then") : subsectionCondition.get("else");
+ if (subsectionCondition.get('id')) {
+ var valueAttributes = action.property_value_attributes;
+ if (valueAttributes && !Em.none(valueAttributes['visible'])) {
+ var themeResource;
+ if (subsectionCondition.get('type') === 'subsection') {
+ themeResource = App.SubSection.find().findProperty('name', subsectionConditionName);
+ } else if (subsectionCondition.get('type') === 'subsectionTab') {
+ themeResource = App.SubSectionTab.find().findProperty('name', subsectionConditionName);
+ }
+ themeResource.set('isHiddenByConfig', !valueAttributes['visible']);
+ }
+ }
+ },
+
/**