Repository: ambari Updated Branches: refs/heads/trunk 352a4a83e -> 4f84718b6
Ambari-18281 Expose Disabling of Alert Targets in Web Client (Vivek Ratnavel Subramanian via zhewang) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4f84718b Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4f84718b Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4f84718b Branch: refs/heads/trunk Commit: 4f84718b691641a1293f677f3b1abc873f1dc07b Parents: 352a4a8 Author: Zhe (Joe) Wang <[email protected]> Authored: Wed Aug 31 17:31:29 2016 -0700 Committer: Zhe (Joe) Wang <[email protected]> Committed: Wed Aug 31 17:31:29 2016 -0700 ---------------------------------------------------------------------- .../manage_alert_notifications_controller.js | 44 ++++++++++++++++++++ .../app/mappers/alert_notification_mapper.js | 5 ++- ambari-web/app/messages.js | 4 ++ .../app/models/alerts/alert_notification.js | 4 ++ ambari-web/app/styles/modal_popups.less | 7 ++++ .../alerts/manage_alert_notifications_popup.hbs | 35 +++++++++++----- .../alerts/manage_alert_notifications_view.js | 35 ++++++++++++++-- .../manage_alert_notifications_view_test.js | 8 ++-- 8 files changed, 122 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/app/controllers/main/alerts/manage_alert_notifications_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/alerts/manage_alert_notifications_controller.js b/ambari-web/app/controllers/main/alerts/manage_alert_notifications_controller.js index 1de15a6..10a7918 100644 --- a/ambari-web/app/controllers/main/alerts/manage_alert_notifications_controller.js +++ b/ambari-web/app/controllers/main/alerts/manage_alert_notifications_controller.js @@ -153,6 +153,16 @@ App.ManageAlertNotificationsController = Em.Controller.extend({ }), /** + * List of available options for Enable or Disable + * used in settings of SelectedAlertNotification + * @type {Object} + */ + enableOrDisable: { + enable: "enable", + disable: "disable" + }, + + /** * List of available Notification types * used in Type combobox * @type {Array} @@ -880,6 +890,40 @@ App.ManageAlertNotificationsController = Em.Controller.extend({ }, /** + * Enable or Disable Notification button handler + * @method enableOrDisableAlertNotification + */ + enableOrDisableAlertNotification: function (e) { + var enabled = (e.context === "disable")?false:true; + return App.ajax.send({ + name: 'alerts.update_alert_notification', + sender: this, + data: { + data: { + "AlertTarget": { + "enabled": enabled + } + }, + id: this.get('selectedAlertNotification.id') + }, + success: 'enableOrDisableAlertNotificationSuccessCallback', + error: 'saveErrorCallback' + }); + }, + + /** + * Success callback for <code>enableOrDisableAlertNotification</code> + * @method enableOrDisableAlertNotificationSuccessCallback + */ + enableOrDisableAlertNotificationSuccessCallback: function () { + this.loadAlertNotifications(); + var createEditPopup = this.get('createEditPopup'); + if (createEditPopup) { + createEditPopup.hide(); + } + }, + + /** * Show popup with form for new custom property * @method addCustomPropertyHandler * @return {App.ModalPopup} http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/app/mappers/alert_notification_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/alert_notification_mapper.js b/ambari-web/app/mappers/alert_notification_mapper.js index 95e2362..9567c77 100644 --- a/ambari-web/app/mappers/alert_notification_mapper.js +++ b/ambari-web/app/mappers/alert_notification_mapper.js @@ -26,7 +26,8 @@ App.alertNotificationMapper = App.QuickDataMapper.create({ name: 'AlertTarget.name', type: 'AlertTarget.notification_type', description: 'AlertTarget.description', - global: 'AlertTarget.global' + global: 'AlertTarget.global', + enabled: 'AlertTarget.enabled' }, map: function (json) { @@ -50,7 +51,7 @@ App.alertNotificationMapper = App.QuickDataMapper.create({ } var previousNotification = App.cache['previousAlertNotificationsFullMap'][notification.id] ? App.cache['previousAlertNotificationsFullMap'][notification.id] : {}; - var changedFields = self.getDiscrepancies(notification, previousNotification, ['name', 'type', 'description', 'global', 'groups']); + var changedFields = self.getDiscrepancies(notification, previousNotification, ['name', 'type', 'description', 'global', 'enabled', 'groups']); if (Object.keys(changedFields).length) { result.push(notification); } http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index b216918..2c819e5 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -198,6 +198,8 @@ Em.I18n.translations = { 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.duplicate': 'Duplicate', + 'common.disable': 'Disable', + 'common.enable': 'Enable', 'common.empty': 'Empty', 'common.override':'Override', 'common.undo':'Undo', @@ -2375,6 +2377,8 @@ Em.I18n.translations = { 'alerts.actions.manage_alert_notifications_popup.editButton':'Edit Alert Notification', 'alerts.actions.manage_alert_notifications_popup.editHeader':'Edit Notification', 'alerts.actions.manage_alert_notifications_popup.duplicateButton':'Duplicate Alert Notification', + 'alerts.actions.manage_alert_notifications_popup.disableButton':'Disable Alert Notification', + 'alerts.actions.manage_alert_notifications_popup.enableButton':'Enable Alert Notification', 'alerts.actions.manage_alert_notifications_popup.method':'Method', 'alerts.actions.manage_alert_notifications_popup.email':'Email To', 'alerts.actions.manage_alert_notifications_popup.SMTPServer':'SMTP Server', http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/app/models/alerts/alert_notification.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/alerts/alert_notification.js b/ambari-web/app/models/alerts/alert_notification.js index c2d7570..e503c6b 100644 --- a/ambari-web/app/models/alerts/alert_notification.js +++ b/ambari-web/app/models/alerts/alert_notification.js @@ -25,6 +25,10 @@ App.AlertNotification = DS.Model.extend({ description: DS.attr('string'), groups: DS.hasMany('App.AlertGroup'), global: DS.attr('boolean'), + enabled: DS.attr('boolean'), + displayName: Ember.computed('enabled', function() { + return (this.get('enabled') === true)?this.get('name'): this.get('name') + ' (Disabled)'; + }), properties: {}, alertStates: [] http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/app/styles/modal_popups.less ---------------------------------------------------------------------- diff --git a/ambari-web/app/styles/modal_popups.less b/ambari-web/app/styles/modal_popups.less index 762ea46..a5c764d 100644 --- a/ambari-web/app/styles/modal_popups.less +++ b/ambari-web/app/styles/modal_popups.less @@ -256,6 +256,13 @@ .modal-body { max-height: 403px; + overflow: visible; + + li.disabled { + a { + cursor: not-allowed; + } + } .form-horizontal{ http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/app/templates/main/alerts/manage_alert_notifications_popup.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/alerts/manage_alert_notifications_popup.hbs b/ambari-web/app/templates/main/alerts/manage_alert_notifications_popup.hbs index 19f9ca3..49724bd 100644 --- a/ambari-web/app/templates/main/alerts/manage_alert_notifications_popup.hbs +++ b/ambari-web/app/templates/main/alerts/manage_alert_notifications_popup.hbs @@ -24,7 +24,7 @@ <span> </span> {{view Em.Select contentBinding="alertNotifications" - optionLabelPath="content.name" + optionLabelPath="content.displayName" multiple="multiple" class="group-select" selectionBinding="view.selectedAlertNotification" @@ -43,16 +43,29 @@ <i class="icon-cog"></i> <span class="caret"></span> </button> <ul class="dropdown-menu"> - <li {{bindAttr class="view.isEditButtonDisabled:disabled"}}> - <a href="" rel="button-info-dropdown" - {{translateAttr data-original-title="alerts.actions.manage_alert_notifications_popup.editButton"}} - {{action editAlertNotification target="controller"}}>{{t common.edit}}</a> - </li> - <li {{bindAttr class="view.isDuplicateButtonDisabled:disabled"}}> - <a href="" rel="button-info-dropdown" - {{translateAttr data-original-title="alerts.actions.manage_alert_notifications_popup.duplicateButton"}} - {{action duplicateAlertNotification target="controller"}}>{{t common.duplicate}}</a> - </li> + <li {{bindAttr class="view.isEditButtonDisabled:disabled"}}> + <a href="" rel="button-info-dropdown" + {{translateAttr data-original-title="alerts.actions.manage_alert_notifications_popup.editButton"}} + {{action editAlertNotification target="view"}}>{{t common.edit}}</a> + </li> + <li {{bindAttr class="view.isDuplicateButtonDisabled:disabled"}}> + <a href="" rel="button-info-dropdown" + {{translateAttr data-original-title="alerts.actions.manage_alert_notifications_popup.duplicateButton"}} + {{action duplicateAlertNotification target="view"}}>{{t common.duplicate}}</a> + </li> + {{#if selectedAlertNotification.enabled}} + <li {{bindAttr class="view.isEnableOrDisableButtonDisabled:disabled"}}> + <a href="" rel="button-info-dropdown" + {{translateAttr data-original-title="alerts.actions.manage_alert_notifications_popup.disableButton"}} + {{action enableOrDisableAlertNotification enableOrDisable.disable target="view"}}>{{t common.disable}}</a> + </li> + {{else}} + <li {{bindAttr class="view.isEnableOrDisableButtonDisabled:disabled"}}> + <a href="" rel="button-info-dropdown" + {{translateAttr data-original-title="alerts.actions.manage_alert_notifications_popup.enableButton"}} + {{action enableOrDisableAlertNotification enableOrDisable.enable target="view"}}>{{t common.enable}}</a> + </li> + {{/if}} </ul> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/app/views/main/alerts/manage_alert_notifications_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/alerts/manage_alert_notifications_view.js b/ambari-web/app/views/main/alerts/manage_alert_notifications_view.js index 5b476a3..abb1694 100644 --- a/ambari-web/app/views/main/alerts/manage_alert_notifications_view.js +++ b/ambari-web/app/views/main/alerts/manage_alert_notifications_view.js @@ -41,7 +41,7 @@ App.ManageAlertNotificationsView = Em.View.extend({ /** * @type {boolean} */ - isEditButtonDisabled: Em.computed.or('!someAlertNotificationIsSelected', 'App.isOperator'), + isEditButtonDisabled: Em.computed.or('!someAlertNotificationIsSelected', 'App.isOperator', '!controller.selectedAlertNotification.enabled'), /** * @type {boolean} @@ -51,7 +51,12 @@ App.ManageAlertNotificationsView = Em.View.extend({ /** * @type {boolean} */ - isDuplicateButtonDisabled: Em.computed.or('!someAlertNotificationIsSelected', 'App.isOperator'), + isDuplicateButtonDisabled: Em.computed.or('!someAlertNotificationIsSelected', 'App.isOperator', '!controller.selectedAlertNotification.enabled'), + + /** + * @type {boolean} + */ + isEnableOrDisableButtonDisabled: Em.computed.or('!someAlertNotificationIsSelected', 'App.isOperator'), /** * Show EMAIL information if selected alert notification has type EMAIL @@ -76,6 +81,25 @@ App.ManageAlertNotificationsView = Em.View.extend({ return this.get('controller.selectedAlertNotification.alertStates').join(', '); }.property('controller.selectedAlertNotification.alertStates'), + editAlertNotification: function () { + if(!this.get('isEditButtonDisabled')) { + this.get('controller').editAlertNotification(); + } + }, + + duplicateAlertNotification: function () { + if(!this.get('isDuplicateButtonDisabled')) { + this.get('controller').duplicateAlertNotification(); + } + }, + + enableOrDisableAlertNotification: function (e) { + if(!this.get('isEnableOrDisableButtonDisabled')) { + this.$("[rel='button-info-dropdown']").tooltip('destroy'); + this.get('controller').enableOrDisableAlertNotification(e); + } + }, + /** * Prevent user select more than 1 alert notification * @method onAlertNotificationSelect @@ -88,6 +112,12 @@ App.ManageAlertNotificationsView = Em.View.extend({ if (selectedAlertNotification && selectedAlertNotification.length > 1) { this.set('selectedAlertNotification', selectedAlertNotification[selectedAlertNotification.length - 1]); } + if(this.$("[rel='button-info-dropdown']")) { + this.$("[rel='button-info-dropdown']").tooltip('destroy'); + } + Em.run.later(this, function () { + App.tooltip(self.$("[rel='button-info-dropdown']").parent().not(".disabled").children(), {placement: 'left'}); + }, 50); }.observes('selectedAlertNotification'), /** @@ -106,7 +136,6 @@ App.ManageAlertNotificationsView = Em.View.extend({ } Em.run.later(this, function () { App.tooltip(self.$("[rel='button-info']")); - App.tooltip(self.$("[rel='button-info-dropdown']"), {placement: 'left'}); }, 50); } }.observes('controller.isLoaded'), http://git-wip-us.apache.org/repos/asf/ambari/blob/4f84718b/ambari-web/test/views/main/alerts/manage_alert_notifications_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/main/alerts/manage_alert_notifications_view_test.js b/ambari-web/test/views/main/alerts/manage_alert_notifications_view_test.js index cebee96..39570dd 100644 --- a/ambari-web/test/views/main/alerts/manage_alert_notifications_view_test.js +++ b/ambari-web/test/views/main/alerts/manage_alert_notifications_view_test.js @@ -217,7 +217,7 @@ describe('App.ManageAlertNotificationsView', function () { it("App.tooltip should be called twice", function () { view.onLoad(); this.clock.tick(50); - expect(App.tooltip.calledTwice).to.be.true; + expect(App.tooltip.calledOnce).to.be.true; }); it("selectedAlertNotification should be null", function () { @@ -247,14 +247,14 @@ describe('App.ManageAlertNotificationsView', function () { view.set('controller.alertNotifications', [{}]); }); - it("Em.run.later should be called", function () { + it("Em.run.later should be called twice", function () { view.onLoad(); - expect(Em.run.later.calledOnce).to.be.true; + expect(Em.run.later.calledTwice).to.be.true; }); it("App.tooltip should be called twice", function () { view.onLoad(); - this.clock.tick(50); + this.clock.tick(100); expect(App.tooltip.calledTwice).to.be.true; });
