You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/12/01 17:07:14 UTC
[29/32] ambari git commit: AMBARI-19048 Delete service action should
show the config recommendation popup. (ababiichuk)
AMBARI-19048 Delete service action should show the config recommendation popup. (ababiichuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9b21f30b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9b21f30b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9b21f30b
Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 9b21f30b5f081d7b313f9070ae125afc84db7647
Parents: ef63373
Author: ababiichuk <ab...@hortonworks.com>
Authored: Thu Dec 1 16:00:31 2016 +0200
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Thu Dec 1 17:07:49 2016 +0200
----------------------------------------------------------------------
.../controllers/main/service/info/configs.js | 2 +-
ambari-web/app/controllers/main/service/item.js | 49 ++++++++++++++------
.../app/controllers/wizard/step7_controller.js | 2 +-
.../app/mixins/main/service/groups_mapping.js | 2 +-
.../info/delete_service_warning_popup.hbs | 28 +++++++++++
.../test/controllers/main/service/item_test.js | 13 +++---
6 files changed, 74 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/9b21f30b/ambari-web/app/controllers/main/service/info/configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index 130b1b5..94caf4a 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -21,7 +21,7 @@ var batchUtils = require('utils/batch_scheduled_requests');
App.MainServiceInfoConfigsController = Em.Controller.extend(App.AddSecurityConfigs, App.ConfigsLoader,
App.ServerValidatorMixin, App.EnhancedConfigsMixin, App.ThemesMappingMixin, App.ConfigsSaverMixin,
- App.ConfigsComparator, App.ComponentActionsByConfigs, App.TrackRequestMixin, {
+ App.ConfigsComparator, App.ComponentActionsByConfigs, {
name: 'mainServiceInfoConfigsController',
http://git-wip-us.apache.org/repos/asf/ambari/blob/9b21f30b/ambari-web/app/controllers/main/service/item.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/item.js b/ambari-web/app/controllers/main/service/item.js
index 18a121f..19b021b 100644
--- a/ambari-web/app/controllers/main/service/item.js
+++ b/ambari-web/app/controllers/main/service/item.js
@@ -21,7 +21,7 @@ var batchUtils = require('utils/batch_scheduled_requests');
var blueprintUtils = require('utils/blueprint');
var stringUtils = require('utils/string_utils');
-App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDownload, App.InstallComponent, App.ConfigsSaverMixin, App.EnhancedConfigsMixin, {
+App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDownload, App.InstallComponent, App.ConfigsSaverMixin, App.EnhancedConfigsMixin, App.GroupsMappingMixin, {
name: 'mainServiceItemController',
/**
@@ -86,6 +86,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
deleteServiceProgressPopup: null,
+ isRecommendationInProgress: false,
+
isClientsOnlyService: function() {
return App.get('services.clientOnly').contains(this.get('content.serviceName'));
}.property('content.serviceName'),
@@ -1317,17 +1319,38 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
showLastWarning: function (serviceName, interDependentServices, dependentServicesToDeleteFmt) {
var self = this,
displayName = App.format.role(serviceName, true),
- popupHeader = Em.I18n.t('services.service.delete.popup.header');
-
- return App.showConfirmationPopup(
- function() {self.confirmDeleteService(serviceName, interDependentServices, dependentServicesToDeleteFmt)},
- Em.I18n.t('services.service.delete.popup.warning').format(displayName) +
- (interDependentServices.length ? Em.I18n.t('services.service.delete.popup.warning.dependent').format(dependentServicesToDeleteFmt) : ''),
- null,
- popupHeader,
- Em.I18n.t('common.delete'),
- true
- );
+ popupHeader = Em.I18n.t('services.service.delete.popup.header'),
+ popupPrimary = Em.I18n.t('common.delete'),
+ warningMessage = Em.I18n.t('services.service.delete.popup.warning').format(displayName) +
+ (interDependentServices.length ? Em.I18n.t('services.service.delete.popup.warning.dependent').format(dependentServicesToDeleteFmt) : '');
+ this.clearRecommendationsInfo();
+ this.setProperties({
+ isRecommendationInProgress: true,
+ selectedConfigGroup: Em.Object.create({
+ isDefault: true
+ })
+ });
+ this.loadConfigRecommendations(null, function () {
+ var serviceNames = self.get('changedProperties').mapProperty('serviceName').uniq();
+ self.loadConfigGroups(serviceNames).done(function () {
+ self.set('isRecommendationInProgress', false);
+ })
+ });
+ return App.ModalPopup.show({
+ controller: self,
+ header: popupHeader,
+ primary: popupPrimary,
+ primaryClass: 'btn-danger',
+ disablePrimary: Em.computed.alias('controller.isRecommendationInProgress'),
+ bodyClass: Em.View.extend({
+ templateName: require('templates/main/service/info/delete_service_warning_popup'),
+ warningMessage: new Em.Handlebars.SafeString(warningMessage)
+ }),
+ onPrimary: function () {
+ self.confirmDeleteService(serviceName, interDependentServices, dependentServicesToDeleteFmt);
+ this._super();
+ }
+ });
},
/**
@@ -1569,7 +1592,7 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
if (params.servicesToDeleteNext) {
this.deleteServiceCall(params.servicesToDeleteNext);
} else {
- this.loadConfigRecommendations(null, this.saveConfigs.bind(this));
+ this.saveConfigs();
}
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/9b21f30b/ambari-web/app/controllers/wizard/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index d43b69b..0d30d12 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -42,7 +42,7 @@ var App = require('app');
* @property {?object[]} slaveComponentHosts
*/
-App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.EnhancedConfigsMixin, App.ToggleIsRequiredMixin, App.GroupsMappingMixin, App.TrackRequestMixin, {
+App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.EnhancedConfigsMixin, App.ToggleIsRequiredMixin, App.GroupsMappingMixin, {
name: 'wizardStep7Controller',
http://git-wip-us.apache.org/repos/asf/ambari/blob/9b21f30b/ambari-web/app/mixins/main/service/groups_mapping.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/main/service/groups_mapping.js b/ambari-web/app/mixins/main/service/groups_mapping.js
index df2fabf..0781aa3 100644
--- a/ambari-web/app/mixins/main/service/groups_mapping.js
+++ b/ambari-web/app/mixins/main/service/groups_mapping.js
@@ -23,7 +23,7 @@ var App = require('app');
*
* @type {Em.Mixin}
*/
-App.GroupsMappingMixin = Em.Mixin.create({
+App.GroupsMappingMixin = Em.Mixin.create(App.TrackRequestMixin, {
/**
* Load config groups
http://git-wip-us.apache.org/repos/asf/ambari/blob/9b21f30b/ambari-web/app/templates/main/service/info/delete_service_warning_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/delete_service_warning_popup.hbs b/ambari-web/app/templates/main/service/info/delete_service_warning_popup.hbs
new file mode 100644
index 0000000..4155947
--- /dev/null
+++ b/ambari-web/app/templates/main/service/info/delete_service_warning_popup.hbs
@@ -0,0 +1,28 @@
+{{!
+* 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.
+}}
+
+{{view.warningMessage}}
+{{#if controller.isRecommendationInProgress}}
+ {{view App.SpinnerView}}
+{{else}}
+ {{#if controller.changedProperties.length}}
+ <div class="alert alert-warning">
+ <span>{{dependenciesMessage}}</span> <a href="#" {{action "showChangedDependentConfigs" target="controller"}}>{{t common.showDetails}}</a>
+ </div>
+ {{/if}}
+{{/if}}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/9b21f30b/ambari-web/test/controllers/main/service/item_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/item_test.js b/ambari-web/test/controllers/main/service/item_test.js
index 082fbd9..a22733f 100644
--- a/ambari-web/test/controllers/main/service/item_test.js
+++ b/ambari-web/test/controllers/main/service/item_test.js
@@ -1380,6 +1380,7 @@ describe('App.MainServiceItemController', function () {
sinon.stub(App.ModalPopup, 'show');
sinon.stub(App.format, 'role', function(name) {return name});
sinon.stub(mainServiceItemController, 'kerberosDeleteWarning');
+ sinon.stub(mainServiceItemController, 'showLastWarning');
mainServiceItemController.reopen({
interDependentServices: []
@@ -1439,7 +1440,7 @@ describe('App.MainServiceItemController', function () {
this.allowUninstallServices.returns(true);
this.mockService.returns([Em.Object.create({workStatus: App.Service.statesMap.stopped}), Em.Object.create({workStatus: App.Service.statesMap.stopped})]);
mainServiceItemController.deleteService('S1');
- expect(App.showConfirmationPopup.calledOnce).to.be.true;
+ expect(mainServiceItemController.showLastWarning.calledOnce).to.be.true;
});
it("service has not dependent services, and install failed", function() {
@@ -1447,7 +1448,7 @@ describe('App.MainServiceItemController', function () {
this.allowUninstallServices.returns(true);
this.mockService.returns([Em.Object.create({workStatus: App.Service.statesMap.install_failed}), Em.Object.create({workStatus: App.Service.statesMap.install_failed})]);
mainServiceItemController.deleteService('S1');
- expect(App.showConfirmationPopup.calledOnce).to.be.true;
+ expect(mainServiceItemController.showLastWarning.calledOnce).to.be.true;
});
it("service has not dependent services, and not stopped", function() {
@@ -1671,27 +1672,27 @@ describe('App.MainServiceItemController', function () {
beforeEach(function() {
mainServiceItemController = App.MainServiceItemController.create({});
- sinon.stub(mainServiceItemController, 'loadConfigRecommendations', Em.K);
+ sinon.stub(mainServiceItemController, 'saveConfigs', Em.K);
sinon.stub(mainServiceItemController, 'deleteServiceCall', Em.K);
mainServiceItemController.reopen({
interDependentServices: []
})
});
afterEach(function() {
- mainServiceItemController.loadConfigRecommendations.restore();
+ mainServiceItemController.saveConfigs.restore();
mainServiceItemController.deleteServiceCall.restore();
});
it("window.location.reload should be called", function() {
mainServiceItemController.deleteServiceCallSuccessCallback([], null, {});
expect(mainServiceItemController.deleteServiceCall.called).to.be.false;
- expect(mainServiceItemController.loadConfigRecommendations.calledOnce).to.be.true;
+ expect(mainServiceItemController.saveConfigs.calledOnce).to.be.true;
});
it("deleteServiceCall should be called", function() {
mainServiceItemController.deleteServiceCallSuccessCallback([], null, {servicesToDeleteNext: true});
expect(mainServiceItemController.deleteServiceCall.calledOnce).to.be.true;
- expect(mainServiceItemController.loadConfigRecommendations.called).to.be.false;
+ expect(mainServiceItemController.saveConfigs.called).to.be.false;
});
});