/** * 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. */ App.MainAlertDefinitionActionsController = Em.ArrayController.extend({ name: 'mainAlertDefinitionActionsController', /** * List of available actions for alert definitions * @type {{title: string, icon: string, action: string, showDivider: boolean}[]} */ content: [ /*{ title: Em.I18n.t('alerts.actions.create'), icon: 'icon-plus', action: 'createNewAlertDefinition', showDivider: true },*/ { title: Em.I18n.t('alerts.actions.manageGroups'), icon: 'icon-th-large', action: 'manageAlertGroups', showDivider: false }, { title: Em.I18n.t('alerts.actions.manageNotifications'), icon: 'icon-envelope-alt', action: 'manageNotifications', showDivider: false } ], /** * Common handler for menu item click * Call proper controller's method described in action-field (see content) * @param {object} event * @method actionHandler */ actionHandler: function(event) { var menuElement = event.context, action = menuElement.action; if ('function' === Em.typeOf(Em.get(this, action))) { this[action](); } else { console.error('Invalid action provided - ', action); } }, /** * Start "Create Alert Definition" wizard * @method createNewAlertDefinition */ createNewAlertDefinition: function() { App.router.transitionTo('alertAdd'); }, /** * Handler when clicking on "Manage Alert Groups", a popup will show up * @method manageAlertGroups * @return {App.ModalPopup} */ manageAlertGroups: function () { return App.ModalPopup.show({ header: Em.I18n.t('alerts.actions.manage_alert_groups_popup.header'), bodyClass: App.MainAlertsManageAlertGroupView.extend({ controllerBinding: 'App.router.manageAlertGroupsController' }), classNames: ['sixty-percent-width-modal', 'manage-alert-group-popup'], primary: Em.I18n.t('common.save'), onPrimary: function () { var modifiedAlertGroups = this.get('subViewController.defsModifiedAlertGroups'); // Save modified Alert-groups console.log("manageAlertGroups(): Saving modified Alert groups: ", modifiedAlertGroups); var self = this; var errors = []; var deleteQueriesCounter = modifiedAlertGroups.toDelete.length; var createQueriesCounter = modifiedAlertGroups.toCreate.length; var deleteQueriesRun = false; var createQueriesRun = false; var runNextQuery = function () { if (!deleteQueriesRun && deleteQueriesCounter > 0) { deleteQueriesRun = true; modifiedAlertGroups.toDelete.forEach(function (group) { self.get('subViewController').removeAlertGroup(group, finishFunction, finishFunction); }, this); } else if (!createQueriesRun && deleteQueriesCounter < 1) { createQueriesRun = true; modifiedAlertGroups.toSet.forEach(function (group) { self.get('subViewController').updateAlertGroup(group, finishFunction, finishFunction); }, this); modifiedAlertGroups.toCreate.forEach(function (group) { self.get('subViewController').postNewAlertGroup(group, finishFunction); }, this); } }; var finishFunction = function (xhr, text, errorThrown) { if (xhr && errorThrown) { var error = xhr.status + "(" + errorThrown + ") "; try { var json = $.parseJSON(xhr.responseText); error += json.message; } catch (err) { } console.error('Error updating Alert Group:', error); errors.push(error); } if (createQueriesRun) { createQueriesCounter--; } else { deleteQueriesCounter--; } if (deleteQueriesCounter + createQueriesCounter < 1) { if (errors.length > 0) { console.log(errors); self.get('subViewController').set('errorMessage', errors.join(". ")); } else { self.hide(); } } else { runNextQuery(); } }; runNextQuery(); }, subViewController: function () { return App.router.get('manageAlertGroupsController'); }.property('App.router.manageAlertGroupsController'), updateButtons: function () { var modified = this.get('subViewController.isDefsModified'); this.set('disablePrimary', !modified); }.observes('subViewController.isDefsModified'), didInsertElement: Em.K }); }, /** * "Manage Alert Notifications" handler * @method manageNotifications * @return {App.ModalPopup} */ manageNotifications: function () { return App.ModalPopup.show({ header: Em.I18n.t('alerts.actions.manage_alert_notifications_popup.header'), bodyClass: App.ManageAlertNotificationsView.extend({ controllerBinding: 'App.router.manageAlertNotificationsController' }), classNames: ['sixty-percent-width-modal', 'manage-configuration-group-popup'], secondary: null, primary: Em.I18n.t('common.close'), didInsertElement: Em.K }); } });