123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717 |
- /**
- * 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');
- var blueprintUtils = require('utils/blueprint');
- App.EnhancedConfigsMixin = Em.Mixin.create({
- /**
- * this value is used for observing
- * whether recommendations for dependent properties was received from server
- * @type {number}
- */
- recommendationTimeStamp: null,
- /**
- * flag is true when Ambari changes some of the dependent properties
- * @type {boolean}
- */
- hasChangedDependencies: function() {
- return App.get('isClusterSupportsEnhancedConfigs') && this.get('isControllerSupportsEnhancedConfigs') && this.get('_dependentConfigValues.length') > 0;
- }.property('_dependentConfigValues.length'),
- /**
- * defines is block with changed dependent configs should be shown
- * rely on controller
- * @type {boolean}
- */
- isControllerSupportsEnhancedConfigs: function() {
- return ['wizardStep7Controller','mainServiceInfoConfigsController'].contains(this.get('name'));
- }.property('name'),
- /**
- * defines if initialValue of config can be used on current controller
- * if not savedValue is used instead
- * @type {boolean}
- */
- useInitialValue: function() {
- ['wizardStep7Controller'].contains(this.get('name'));
- }.property('name'),
- /**
- * message fro alert box for dependent configs
- * @type {string}
- */
- dependenciesMessage: function() {
- var changedServices = this.get('changedProperties').mapProperty('serviceName').uniq();
- var cfgLen = this.get('changedProperties.length') === 1 ? 'singular' : 'plural';
- var sLen = changedServices.length === 1 ? 'singular' : 'plural';
- return Em.I18n.t('popup.dependent.configs.dependencies.config.' + cfgLen).format(this.get('changedProperties.length'))
- + Em.I18n.t('popup.dependent.configs.dependencies.service.' + sLen).format(changedServices.length);
- }.property('changedProperties'),
- /**
- * values for dependent configs
- * @type {Object[]}
- * ex:
- * {
- * saveRecommended: {boolean}, //by default is true (checkbox binding)
- * saveRecommendedDefault: {boolean}, used for cancel operation to restore previous state
- * toDelete: {boolean} [true], // defines if property should be deleted
- * toAdd: {boolean} [false], // defines if property should be added
- * isDeleted: {boolean} [true], // defines if property was deleted, but was present in initial configs
- * fileName: {string}, //file name without '.xml'
- * propertyName: {string},
- * parentConfigs: {string[]} // name of the parent configs
- * configGroup: {string},
- * value: {string},
- * serviceName: {string},
- * allowChangeGroup: {boolean}, //used to disable group link for current service
- * serviceDisplayName: {string},
- * recommendedValue: {string}
- * }
- * @private
- */
- _dependentConfigValues: Em.A([]),
- /**
- * dependent properties that was changed by Ambari
- * @type {Object[]}
- */
- changedProperties: function() {
- return this.get('_dependentConfigValues').filterProperty('saveRecommended', true);
- }.property('_dependentConfigValues.@each.saveRecommended'),
- /**
- * dependent file names for configs
- * @type {string[]}
- */
- dependentFileNames: [],
- /**
- * dependent service names for configs
- * @type {string[]}
- */
- dependentServiceNames: [],
- /**
- * config groups for dependent services
- * @type {App.ConfigGroup[]}
- */
- dependentConfigGroups: [],
- /**
- * contains config group name that need to be saved
- * {
- * serviceName: {String} configGroupName
- * }
- * @type {Object}
- */
- groupsToSave: {},
- /******************************METHODS THAT WORKS WITH DEPENDENT CONFIGS *************************************/
- /**
- * clear values for dependent configs
- * @method clearDependentConfigs
- * @private
- */
- clearDependentConfigs: function() {
- this.setProperties({
- groupsToSave: {},
- _dependentConfigValues: []
- });
- },
- onConfigGroupChangeForEnhanced: function() {
- if (this.get('name') === 'mainServiceInfoConfigsController') {
- this.clearDependentConfigs();
- } else {
- this.set('groupsToSave', {});
- }
- this.get('dependentServiceNames').forEach(function(serviceName) {
- var defaultGroup = this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).findProperty('isDefault');
- this.get('groupsToSave')[serviceName] = defaultGroup.get('name');
- }, this);
- }.observes('selectedConfigGroup'),
- /**
- * runs <code>setDependentServicesAndFileNames<code>
- * for stack properties for current service
- * @method loadDependentConfigs
- */
- setDependentServices: function(serviceName) {
- App.StackConfigProperty.find().forEach(function(stackProperty) {
- if (stackProperty.get('serviceName') === serviceName && stackProperty.get('propertyDependedBy.length') > 0) {
- this._setDependentServicesAndFileNames(stackProperty);
- }
- }, this);
- },
- /**
- * get config group object for current service
- * @param serviceName
- * @returns {App.ConfigGroup|null}
- */
- getGroupForService: function(serviceName) {
- if (this.get('stepConfigs.length') === 0) return null;
- if (this.get('name') === 'wizardStep7Controller') {
- return this.get('stepConfigs').findProperty('serviceName', serviceName).get('selectedConfigGroup');
- } else {
- if (this.get('content.serviceName') === serviceName) {
- return this.get('selectedConfigGroup')
- } else {
- if (this.get('selectedConfigGroup.isDefault')) {
- return this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).findProperty('isDefault');
- } else {
- return this.get('dependentConfigGroups').findProperty('name', this.get('groupsToSave')[serviceName]);
- }
- }
- }
- },
- /**
- * show popup to select config group for dependent services
- * to which dependent configs will ve saved
- * @method showSelectGroupsPopup
- */
- showSelectGroupPopup: function(event) {
- var serviceName = event.context;
- if (serviceName !== this.get('content.serviceName')) {
- var groups = this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).mapProperty('name').uniq();
- if (groups.length) {
- var configs = this.get('_dependentConfigValues').filterProperty('serviceName', serviceName);
- App.showSelectGroupsPopup(serviceName, groups, this.get('groupsToSave'), configs);
- }
- }
- },
- /**
- * disable saving recommended value for current config
- * @param config
- * @param {boolean} saveRecommended
- * @method removeCurrentFromDependentList
- */
- removeCurrentFromDependentList: function (config, saveRecommended) {
- var current = this.get('_dependentConfigValues').find(function(dependentConfig) {
- return Em.get(dependentConfig, 'propertyName') == config.get('name') && Em.get(dependentConfig, 'fileName') == App.config.getConfigTagFromFileName(config.get('filename'))
- });
- if (current) {
- Em.setProperties(current, {
- 'saveRecommended': !!saveRecommended,
- 'saveRecommendedDefault': !!saveRecommended
- });
- }
- },
- /**
- * sends request to get values for dependent configs
- * @param {{type: string, name: string}[]} changedConfigs - list of changed configs to track recommendations
- * @param {Boolean} initial
- * @param {Function} onComplete
- * @returns {$.ajax|null}
- */
- getRecommendationsForDependencies: function(changedConfigs, initial, onComplete) {
- if (Em.isArray(changedConfigs) && changedConfigs.length > 0 || initial) {
- var recommendations = this.get('hostGroups');
- recommendations.blueprint.configurations = blueprintUtils.buildConfigsJSON(this.get('services'), this.get('stepConfigs'));
- delete recommendations.config_groups;
- var dataToSend = {
- recommend: 'configurations',
- hosts: this.get('hostNames'),
- services: this.get('serviceNames')
- };
- if (App.get('isClusterSupportsEnhancedConfigs') && changedConfigs) {
- if (changedConfigs) {
- dataToSend.recommend = 'configuration-dependencies';
- dataToSend.changed_configurations = changedConfigs;
- }
- if (!this.get('selectedConfigGroup.isDefault') && this.get('selectedConfigGroup.hosts.length') > 0) {
- var configGroups = this.buildConfigGroupJSON(this.get('stepConfigs').findProperty('serviceName', this.get('content.serviceName')).get('configs'), this.get('selectedConfigGroup'));
- recommendations.config_groups = [configGroups];
- }
- }
- dataToSend.recommendations = recommendations;
- return App.ajax.send({
- name: 'config.recommendations',
- sender: this,
- data: {
- stackVersionUrl: App.get('stackVersionURL'),
- dataToSend: dataToSend,
- initial: initial
- },
- success: 'dependenciesSuccess',
- error: 'dependenciesError',
- callback: function() {
- if (onComplete) {
- onComplete()
- }
- }
- });
- } else {
- return null;
- }
- },
- /**
- * generates JSON with config group info to send it for recommendations
- * @param configs
- * @param configGroup
- * @returns {{configurations: Object[], hosts: string[]}}
- */
- buildConfigGroupJSON: function(configs, configGroup) {
- Em.assert('configGroup can\'t be null', configGroup);
- var hosts = configGroup.get('hosts');
- var configurations = {};
- var overrides = configs.forEach(function(cp) {
- var override = cp.get('overrides') && cp.get('overrides').findProperty('group.name', configGroup.get('name'));
- if (override) {
- var tag = App.config.getConfigTagFromFileName(cp.get('filename'));
- if (!configurations[tag]) {
- configurations[tag] = { properties: {} };
- }
- configurations[tag].properties[cp.get('name')] = override.get('value');
- }
- });
- return {
- configurations: [configurations],
- hosts: hosts
- }
- },
- /**
- * shows popup with results for recommended value
- * if case properties that was changes belongs to not default group
- * user should pick to what config group from dependent service dependent properties will be saved
- * @param data
- * @param opt
- * @param params
- * @method dependenciesSuccess
- */
- dependenciesSuccess: function (data, opt, params) {
- this._saveRecommendedValues(data, params.initial, params.dataToSend.changed_configurations);
- this.set("recommendationsConfigs", Em.get(data.resources[0] , "recommendations.blueprint.configurations"));
- if (!params.initial) {
- this.updateDependentConfigs();
- }
- },
- /**
- * method to show popup with dependent configs
- * @method showChangedDependentConfigs
- */
- showChangedDependentConfigs: function(event, callback, secondary) {
- var self = this;
- if (this.get('_dependentConfigValues.length') > 0) {
- App.showDependentConfigsPopup(this.get('_dependentConfigValues'), function() {
- self.updateDependentConfigs();
- if (callback) {
- callback();
- }
- }, secondary);
- } else {
- if (callback) {
- callback();
- }
- }
- },
- /**
- *
- * @param jqXHR
- * @param ajaxOptions
- * @param error
- * @param opt
- */
- dependenciesError: function(jqXHR, ajaxOptions, error, opt) {
- this.set('recommendationTimeStamp', (new Date).getTime());
- App.ajax.defaultErrorHandler(jqXHR, opt.url, opt.method, jqXHR.status);
- },
- /**
- * defines file names for configs and set them to <code>dependentFileNames<code> and
- * defines service names for configs and set them to <code>dependentServiceNames<code>
- * @param {App.StackConfigProperty} stackProperty
- * @private
- */
- _setDependentServicesAndFileNames: function(stackProperty) {
- if (stackProperty.get('propertyDependedBy.length') > 0) {
- stackProperty.get('propertyDependedBy').forEach(function(dependent) {
- var tag = App.config.getConfigTagFromFileName(dependent.type);
- /** setting dependent fileNames (without '.xml') **/
- if (!this.get('dependentFileNames').contains(tag)) {
- this.get('dependentFileNames').push(tag);
- }
- /** setting dependent serviceNames (without current serviceName) **/
- var dependentProperty = App.StackConfigProperty.find(dependent.name + "_" + tag);
- if (dependentProperty) {
- if (dependentProperty.get('serviceName') && !this.get('dependentServiceNames').contains(dependentProperty.get('serviceName')) && dependentProperty.get('serviceName') !== this.get('content.serviceName')) {
- this.get('dependentServiceNames').push(dependentProperty.get('serviceName'));
- }
- this._setDependentServicesAndFileNames(dependentProperty);
- }
- }, this);
- }
- },
- /**
- * saves values from response for dependent config properties to <code>_dependentConfigValues<code>
- * @param data
- * @param [updateOnlyBoundaries=false]
- * @param [changedConfigs=null]
- * @method saveRecommendedValues
- * @private
- */
- _saveRecommendedValues: function(data, updateOnlyBoundaries, changedConfigs) {
- Em.assert('invalid data - `data.resources[0].recommendations.blueprint.configurations` not defined ', data && data.resources[0] && Em.get(data.resources[0], 'recommendations.blueprint.configurations'));
- var configObject = data.resources[0].recommendations.blueprint.configurations;
- this.parseConfigsByTag(configObject, updateOnlyBoundaries, changedConfigs, false);
- if (!this.get('selectedConfigGroup.isDefault') && data.resources[0].recommendations['config-groups']) {
- var configFroGroup = data.resources[0].recommendations['config-groups'][0];
- this.parseConfigsByTag(configFroGroup.configurations, updateOnlyBoundaries, changedConfigs, true);
- this.parseConfigsByTag(configFroGroup.dependent_configurations, updateOnlyBoundaries, changedConfigs, true);
- }
- },
- /**
- * saves values from response for dependent configs to <code>_dependentConfigValues<code>
- * @param configObject - JSON response from `recommendations` endpoint
- * @param updateOnlyBoundaries
- * @param notDefaultGroup
- * @param {App.ServiceConfigProperty[]} parentConfigs - config properties for which recommendations were received
- * @method saveRecommendedValues
- * @private
- */
- parseConfigsByTag: function(configObject, updateOnlyBoundaries, parentConfigs, notDefaultGroup) {
- var parentPropertiesNames = parentConfigs ? parentConfigs.mapProperty('name') : [];
- /** get all configs by config group **/
- for (var key in configObject) {
- /** defines main info for file name (service name, config group, config that belongs to filename) **/
- var service = App.config.getServiceByConfigType(key);
- var serviceName = service.get('serviceName');
- var stepConfig = this.get('stepConfigs').findProperty('serviceName', serviceName);
- if (stepConfig) {
- var initialValue;
- var configProperties = stepConfig ? stepConfig.get('configs').filterProperty('filename', App.config.getOriginalFileName(key)) : [];
- var group = this.getGroupForService(serviceName);
- for (var propertyName in configObject[key].properties) {
- var dependentProperty = this.get('_dependentConfigValues').filterProperty('propertyName', propertyName).findProperty('fileName', key);
- var cp = configProperties.findProperty('name', propertyName);
- var override = (notDefaultGroup && group && cp && cp.get('overrides')) ? cp.get('overrides').findProperty('group.name', group.get('name')) : null;
- var value = override ? override.get('value') : cp && cp.get('value');
- if (this.get('useInitialValue')) {
- initialValue = override ? override.get('initialValue') : cp && cp.get('initialValue');
- } else {
- initialValue = override ? override.get('savedValue') : cp && cp.get('savedValue');
- }
- initialValue = Em.isNone(initialValue) ? value : initialValue;
- var recommendedValue = configObject[key].properties[propertyName];
- var isNewProperty = (!notDefaultGroup && Em.isNone(cp)) || (notDefaultGroup && group && Em.isNone(override));
- var parsedInit = parseFloat(initialValue);
- var parsedRecommended = parseFloat(recommendedValue);
- if (!isNaN(parsedInit) && !isNaN(parsedRecommended)) {
- initialValue = parsedInit.toString();
- recommendedValue = parsedRecommended.toString();
- }
- if (!updateOnlyBoundaries && !parentPropertiesNames.contains(propertyName) && initialValue != recommendedValue) { //on first initial request we don't need to change values
- if (dependentProperty) {
- Em.set(dependentProperty, 'value', initialValue);
- Em.set(dependentProperty, 'recommendedValue', recommendedValue);
- Em.set(dependentProperty, 'toDelete', false);
- Em.set(dependentProperty, 'toAdd', isNewProperty);
- Em.set(dependentProperty, 'parentConfigs', dependentProperty.parentConfigs.concat(parentPropertiesNames).uniq());
- } else {
- this.get('_dependentConfigValues').pushObject({
- saveRecommended: true,
- saveRecommendedDefault: true,
- toDelete: false,
- isDeleted: false,
- toAdd: isNewProperty,
- fileName: key,
- propertyName: propertyName,
- configGroup: group ? group.get('name') : service.get('displayName') + " Default",
- value: initialValue,
- parentConfigs: parentPropertiesNames,
- serviceName: serviceName,
- allowChangeGroup: serviceName != this.get('content.serviceName') && !this.get('selectedConfigGroup.isDefault'),
- serviceDisplayName: service.get('displayName'),
- recommendedValue: recommendedValue
- });
- }
- }
- /**
- * saving recommended value to service config properties
- * this value can be used as marker on slider widget
- */
- if (notDefaultGroup) {
- override && override.set('recommendedValue', recommendedValue);
- } else {
- cp && cp.set('recommendedValue', recommendedValue);
- }
- /**
- * clear _dependentPropertyValues from
- * properties that wasn't changed while recommendations
- */
- if ((initialValue == recommendedValue) || (Em.isNone(initialValue) && Em.isNone(recommendedValue))) {
- /** if recommended value same as default we shouldn't show it in popup **/
- if (notDefaultGroup) {
- if (override) {
- if (override.get('isNotSaved')) {
- cp.get('overrides').removeObject(override);
- } else {
- override.set('value', initialValue);
- }
- if (dependentProperty) {
- this.get('_dependentConfigValues').removeObject(dependentProperty);
- }
- }
- } else {
- cp.set('value', initialValue);
- if (dependentProperty) {
- this.get('_dependentConfigValues').removeObject(dependentProperty);
- }
- }
- }
- }
- }
- this._saveRecommendedAttributes(configObject, parentPropertiesNames, updateOnlyBoundaries);
- }
- },
- /**
- * Save property attributes received from recommendations. These attributes are minimum, maximum,
- * increment_step. Attributes are stored in <code>App.StackConfigProperty</code> model.
- *
- * @param {Object[]} configs
- * @param parentPropertiesNames
- * @param updateOnlyBoundaries
- * @private
- */
- _saveRecommendedAttributes: function(configs, parentPropertiesNames, updateOnlyBoundaries) {
- var self = this;
- Em.keys(configs).forEach(function (siteName) {
- var service = App.config.getServiceByConfigType(siteName);
- var serviceName = service.get('serviceName');
- var group = self.getGroupForService(serviceName);
- var stepConfig = self.get('stepConfigs').findProperty('serviceName', serviceName);
- var configProperties = stepConfig ? stepConfig.get('configs').filterProperty('filename', App.config.getOriginalFileName(siteName)) : [];
- var properties = configs[siteName].property_attributes || {};
- Em.keys(properties).forEach(function (propertyName) {
- var cp = configProperties.findProperty('name', propertyName);
- var stackProperty = App.StackConfigProperty.find().findProperty('id', propertyName + '_' + siteName);
- var attributes = properties[propertyName] || {};
- Em.keys(attributes).forEach(function (attributeName) {
- if (attributeName == 'delete') {
- if (!updateOnlyBoundaries) {
- var dependentProperty = self.get('_dependentConfigValues').filterProperty('propertyName', propertyName).findProperty('fileName', siteName);
- if (dependentProperty) {
- Em.set(dependentProperty, 'toDelete', true);
- Em.set(dependentProperty, 'toAdd', false);
- Em.set(dependentProperty, 'recommendedValue', null);
- } else {
- self.get('_dependentConfigValues').pushObject({
- saveRecommended: true,
- saveRecommendedDefault: true,
- propertyValue: cp && (cp.get('useInitialValue') ? cp.get('initialValue') : cp.get('savedValue')),
- toDelete: true,
- toAdd: false,
- isDeleted: true,
- fileName: siteName,
- propertyName: propertyName,
- configGroup: group ? group.get('name') : service.get('displayName') + " Default",
- parentConfigs: parentPropertiesNames,
- serviceName: service.get('serviceName'),
- allowChangeGroup: service.get('serviceName') != self.get('content.serviceName') && !self.get('selectedConfigGroup.isDefault'),
- serviceDisplayName: service.get('displayName'),
- recommendedValue: null
- });
- }
- }
- } else if (stackProperty) {
- Em.set(stackProperty.get('valueAttributes'), attributeName, attributes[attributeName]);
- }
- });
- });
- });
- },
- /**
- * save values that are stored in <code>_dependentConfigValues<code>
- * to step configs
- */
- updateDependentConfigs: function() {
- var self = this;
- this.get('stepConfigs').forEach(function(serviceConfigs) {
- var selectedGroup = self.getGroupForService(serviceConfigs.get('serviceName'));
- self._updateRecommendedValues(serviceConfigs, selectedGroup);
- self._addRecommendedProperties(serviceConfigs, selectedGroup);
- self._removeUnRecommendedProperties(serviceConfigs, selectedGroup);
- });
- this.set('recommendationTimeStamp', (new Date).getTime());
- },
- /**
- * add configs that was recommended and wasn't present in stepConfigs
- * @param stepConfigs
- * @param selectedGroup
- * @private
- */
- _addRecommendedProperties: function(stepConfigs, selectedGroup) {
- var propertiesToAdd = this.get('_dependentConfigValues').filterProperty('toAdd').filterProperty('serviceName', stepConfigs.get('serviceName'));
- if (propertiesToAdd.length > 0) {
- propertiesToAdd.forEach(function(propertyToAdd) {
- if (!selectedGroup || selectedGroup.get('isDefault')) {
- if (Em.get(propertyToAdd, 'isDeleted')) {
- this.get('_dependentConfigValues').removeObject(propertyToAdd);
- }
- var addedProperty = App.ServiceConfigProperty.create({
- name: Em.get(propertyToAdd, 'propertyName'),
- displayName: Em.get(propertyToAdd, 'propertyName'),
- value: Em.get(propertyToAdd, 'recommendedValue'),
- recommendedValue: Em.get(propertyToAdd, 'recommendedValue'),
- savedValue: null,
- category: 'Advanced ' + Em.get(propertyToAdd, 'fileName'),
- serviceName: stepConfigs.get('serviceName'),
- filename: App.config.getOriginalFileName(Em.get(propertyToAdd, 'fileName')),
- isNotSaved: !Em.get(propertyToAdd, 'isDeleted'),
- isRequired: true
- });
- stepConfigs.get('configs').pushObject(addedProperty);
- addedProperty.validate();
- } else {
- var cp = stepConfigs.get('configs').filterProperty('name', Em.get(propertyToAdd, 'propertyName')).findProperty('filename', App.config.getOriginalFileName(Em.get(propertyToAdd, 'fileName')));
- if (Em.get(propertyToAdd, 'isDeleted')) {
- this.get('_dependentConfigValues').removeObject(propertyToAdd);
- }
- this.addOverrideProperty(cp, selectedGroup, Em.get(propertyToAdd, 'recommendedValue'), !Em.get(propertyToAdd, 'isDeleted'));
- }
- Em.setProperties(propertyToAdd, {
- isDeleted: false,
- toAdd: false,
- toDelete: false
- });
- }, this);
- }
- },
- /**
- * remove configs that was recommended to delete from stepConfigs
- * @param stepConfigs
- * @param selectedGroup
- * @private
- */
- _removeUnRecommendedProperties: function(stepConfigs, selectedGroup) {
- var propertiesToDelete = this.get('_dependentConfigValues').filterProperty('toDelete').filterProperty('serviceName', stepConfigs.get('serviceName'));
- if (propertiesToDelete.length > 0) {
- propertiesToDelete.forEach(function(propertyToDelete) {
- var cp = stepConfigs.get('configs').filterProperty('name', Em.get(propertyToDelete, 'propertyName')).findProperty('filename', App.config.getOriginalFileName(Em.get(propertyToDelete, 'fileName')));
- if (cp) {
- if (!selectedGroup || selectedGroup.get('isDefault')) {
- if (cp.get('isNotSaved')) {
- this.get('_dependentConfigValues').removeObject(propertyToDelete);
- }
- stepConfigs.get('configs').removeObject(cp);
- if (!cp.get('isNotSaved')) {
- Em.set(propertyToDelete, 'isDeleted', true);
- }
- } else {
- var overriddenConfig = cp.get('overrides') && cp.get('overrides').findProperty('group.name', selectedGroup.get('name'));
- if (overriddenConfig) {
- if (overriddenConfig.get('isNotSaved')) {
- this.get('_dependentConfigValues').removeObject(propertyToDelete);
- }
- cp.removeObject(overriddenConfig);
- if (!overriddenConfig.get('isNotSaved')) {
- Em.set(propertyToDelete, 'isDeleted', true);
- }
- }
- }
- Em.setProperties(propertyToDelete, {
- toAdd: false,
- toDelete: false
- });
- }
- }, this);
- }
- },
- /**
- * update config to their recommended values
- * @param stepConfigs
- * @param selectedGroup
- * @private
- */
- _updateRecommendedValues: function(stepConfigs, selectedGroup) {
- var propertiesToUpdate = this.get('_dependentConfigValues').filter(function(p) {
- return !Em.get(p, 'toDelete') && !Em.get(p, 'toAdd') && Em.get(p, 'serviceName') == stepConfigs.get('serviceName');
- });
- if (propertiesToUpdate.length > 0) {
- stepConfigs.get('configs').forEach(function (cp) {
- var propertyToUpdate = propertiesToUpdate.filterProperty('propertyName', cp.get('name')).findProperty('fileName', App.config.getConfigTagFromFileName(cp.get('filename')));
- if (propertyToUpdate) {
- var valueToSave = propertyToUpdate.saveRecommended ? propertyToUpdate.recommendedValue : propertyToUpdate.value;
- if (!selectedGroup || selectedGroup.get('isDefault')) {
- if (propertyToUpdate.saveRecommended || cp.get('value') == propertyToUpdate.recommendedValue) {
- cp.set('value', valueToSave);
- }
- cp.set('recommendedValue', propertyToUpdate.recommendedValue);
- } else {
- if (stepConfigs.get('serviceName') !== this.get('content.serviceName')) {
- if (propertyToUpdate.saveRecommended || cp.get('value') == propertyToUpdate.recommendedValue) {
- cp.set('value', this.get('useInitialValue') ? cp.get('initialValue') : cp.get('savedValue'));
- }
- cp.set('recommendedValue', propertyToUpdate.recommendedValue);
- }
- var overriddenConfig = cp.get('overrides') && cp.get('overrides').findProperty('group.name', selectedGroup.get('name'));
- if (overriddenConfig) {
- if (propertyToUpdate.saveRecommended || overriddenConfig.get('value') == propertyToUpdate.recommendedValue) {
- overriddenConfig.set('value', valueToSave);
- }
- overriddenConfig.set('recommendedValue', propertyToUpdate.recommendedValue);
- }
- }
- }
- }, this);
- }
- }
- });
|