"use strict"; /** * Licensed Materials - Property of IBM * IBM Cognos Products: admin * Copyright IBM Corp. 2018 * US Government Users Restricted Rights - * Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ define(['jquery', 'underscore', 'q', 'bi/commons/ui/core/Class', 'bi/commons/ui/dialogs/ConfirmationDialog', 'bi/admin/nls/StringResource'], function ($, _, Q, Class, ConfirmationDialog, StringResource) { 'use strict'; //NOSONAR: meant to be strict var TopicsListController = Class.extend({ loggingConfigUrl: 'v1/glug/config/logging', builtinTopicUrl: 'v1/glug/topics/builtin', customTopicUrl: 'v1/glug/topics/custom', favouriteTopicList: ['AAA', 'CM', 'MOSER', 'DISP', 'POGO_MSGS', 'DEFAULT'], init: function init(options) { TopicsListController.inherited('init', this, arguments); this.glassContext = options.glassContext; }, _getCurrentTopic: function _getCurrentTopic() { var ajaxService = this.glassContext.services.ajax; var promise = ajaxService.ajax({ 'dataType': 'json', 'type': 'GET', 'data': {}, 'url': this.loggingConfigUrl }); return Q.when(promise); }, _updateLoggingConfiguration: function _updateLoggingConfiguration(loggingSettings) { var loggingSettingsDeferred; if (!_.isEmpty(loggingSettings)) { var ajaxService = this.glassContext.services.ajax; loggingSettingsDeferred = ajaxService.ajax({ 'type': 'PUT', 'url': this.loggingConfigUrl, 'contentType': 'application/json', 'data': JSON.stringify(loggingSettings) }); } return Q.when(loggingSettingsDeferred); }, deleteAddOnTopic: function deleteAddOnTopic(selectedTopicName) { var ajaxService = this.glassContext.services.ajax; var deleteTopicsUrl = this.customTopicUrl + '/' + selectedTopicName; var promise = ajaxService.ajax({ 'dataType': 'json', 'type': 'DELETE', 'data': {}, 'url': deleteTopicsUrl }); return Q.when(promise); }, _getDefaultTopicDescription: function _getDefaultTopicDescription(selectedTopicName) { var ajaxService = this.glassContext.services.ajax; var getTopicsUrl = this.builtinTopicUrl + '/' + selectedTopicName; var promise = ajaxService.ajax({ 'dataType': 'json', 'type': 'GET', 'data': {}, 'url': getTopicsUrl }); return promise.then(function (object) { return object; }.bind(this)); }, _getAddOnTopicDescription: function _getAddOnTopicDescription(selectedTopicName) { var ajaxService = this.glassContext.services.ajax; var getTopicsUrl = this.customTopicUrl + '/' + selectedTopicName; var promise = ajaxService.ajax({ 'dataType': 'json', 'type': 'GET', 'data': {}, 'url': getTopicsUrl }); return promise.then(function (object) { return object; }.bind(this)); }, _getFavouriteTopicList: function _getFavouriteTopicList() { var ajaxService = this.glassContext.services.ajax; var promise = ajaxService.ajax({ 'dataType': 'json', 'type': 'GET', 'data': {}, 'url': this.builtinTopicUrl }); return promise.then(function (list) { var resultList = this._buildFavouriteTopicList(); return resultList; }.bind(this)); }, _buildFavouriteTopicList: function _buildFavouriteTopicList() { var resultList = []; for (var i = 0; i < this.favouriteTopicList.length; i++) { var topic = { name: StringResource.get(this.favouriteTopicList[i]), id: this.favouriteTopicList[i] }; resultList.push(topic); } return resultList; }, _getDefaultTopicList: function _getDefaultTopicList() { var ajaxService = this.glassContext.services.ajax; var promise = ajaxService.ajax({ 'dataType': 'json', 'type': 'GET', 'data': {}, 'url': this.builtinTopicUrl }); return promise.then(function (list) { var array = list['topicNames']; var resultList = []; for (var i = 0; i < array.length; i++) { var topic = { name: StringResource.get(array[i]), id: array[i] }; resultList.push(topic); } return resultList; }.bind(this)); }, _getAddOnTopicList: function _getAddOnTopicList() { var ajaxService = this.glassContext.services.ajax; var promise = ajaxService.ajax({ 'dataType': 'json', 'type': 'GET', 'data': {}, 'url': this.customTopicUrl }); return promise.then(function (list) { var array = list['topicNames']; var resultList = []; for (var i = 0; i < array.length; i++) { var topic = { name: StringResource.get(array[i]), id: array[i] }; resultList.push(topic); } return resultList; }.bind(this)); }, _UpdateOrUploadHelper: function _UpdateOrUploadHelper(options, type) { var ajaxService = this.glassContext.services.ajax; var url = this.customTopicUrl + '/' + options.fileName; var msg = { 'code': '', 'msg': options.fileName, 'options': options }; var ajaxOptions = { 'type': type, 'headers': { 'Accept': 'application/json', 'Content-Type': 'application/json' }, 'url': url, 'data': options.data, 'Content-Length': options.byteLength, 'processData': false, success: function success(data, textStatus, jqXHR) { msg.code = jqXHR.status; msg.responseText = jqXHR.responseText; }, error: function error(jqXHR) { msg.code = jqXHR.status; msg.responseText = jqXHR.responseText; } }; var promise = ajaxService.ajax(ajaxOptions); return promise.always(function () { return this.renderResponse(msg); }.bind(this)); }, _updateOrUpload: function _updateOrUpload(options) { return this._UpdateOrUploadHelper(options, 'POST'); }, _updateFromUpload: function _updateFromUpload(options) { return this._UpdateOrUploadHelper(options, 'PUT'); }, _uploadForUpdate: function _uploadForUpdate(options) { var oDialog = new ConfirmationDialog('confirmUpdate', StringResource.get('confirmUpdate'), StringResource.get('confirmUpdateMessage', { 'topicName': options.fileName })); oDialog.confirm(function () { this._updateFromUpload(options).then(function () {}.bind(this), function (ajaxObj, err) { this.glassContext.appController.showErrorMessage(AJAXUtils.buildErrorMessage(err.responseJSON.errors), StringResource.get('error')); }.bind(this)); }.bind(this)); oDialog.renderContent($('
')); }, renderErrorMessage: function renderErrorMessage(responseText) { var errorMsg; var message = JSON.parse(responseText).messages; errorMsg = StringResource.get(message[0].messageKey, { 'loggerName': message[0].params[0] }); return errorMsg; }, renderErrorResponse: function renderErrorResponse(msg) { var sText; if (msg.code === 409 && !_.isUndefined(msg.options)) { return this._uploadForUpdate(msg.options); } else { sText = this.renderErrorMessage(msg.responseText); } return this.glassContext.appController.showErrorMessage(sText, StringResource.get('error')); }, renderSuccessResponse: function renderSuccessResponse(msg) { var sText; if (msg.code === 201) { sText = StringResource.get('topicCreateMsg', { 'topicName': msg.msg }); } else if (msg.code === 200) { sText = StringResource.get('topicUpdateMsg', { 'topicName': msg.msg }); } return this.glassContext.appController.showToast(sText, { 'type': 'success' }); }, renderResponse: function renderResponse(msg) { if (msg.code >= 400) { return this.renderErrorResponse(msg); } else if (msg.code >= 200) { return this.renderSuccessResponse(msg); } } }); return TopicsListController; });