TopicsListController.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: admin
  5. * Copyright IBM Corp. 2018
  6. * US Government Users Restricted Rights -
  7. * Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. define(['jquery', 'underscore', 'q', 'bi/commons/ui/core/Class', 'bi/commons/ui/dialogs/ConfirmationDialog', 'bi/admin/nls/StringResource'], function ($, _, Q, Class, ConfirmationDialog, StringResource) {
  10. 'use strict'; //NOSONAR: meant to be strict
  11. var TopicsListController = Class.extend({
  12. loggingConfigUrl: 'v1/glug/config/logging',
  13. builtinTopicUrl: 'v1/glug/topics/builtin',
  14. customTopicUrl: 'v1/glug/topics/custom',
  15. favouriteTopicList: ['AAA', 'CM', 'MOSER', 'DISP', 'POGO_MSGS', 'DEFAULT'],
  16. init: function init(options) {
  17. TopicsListController.inherited('init', this, arguments);
  18. this.glassContext = options.glassContext;
  19. },
  20. _getCurrentTopic: function _getCurrentTopic() {
  21. var ajaxService = this.glassContext.services.ajax;
  22. var promise = ajaxService.ajax({
  23. 'dataType': 'json',
  24. 'type': 'GET',
  25. 'data': {},
  26. 'url': this.loggingConfigUrl
  27. });
  28. return Q.when(promise);
  29. },
  30. _updateLoggingConfiguration: function _updateLoggingConfiguration(loggingSettings) {
  31. var loggingSettingsDeferred;
  32. if (!_.isEmpty(loggingSettings)) {
  33. var ajaxService = this.glassContext.services.ajax;
  34. loggingSettingsDeferred = ajaxService.ajax({
  35. 'type': 'PUT',
  36. 'url': this.loggingConfigUrl,
  37. 'contentType': 'application/json',
  38. 'data': JSON.stringify(loggingSettings)
  39. });
  40. }
  41. return Q.when(loggingSettingsDeferred);
  42. },
  43. deleteAddOnTopic: function deleteAddOnTopic(selectedTopicName) {
  44. var ajaxService = this.glassContext.services.ajax;
  45. var deleteTopicsUrl = this.customTopicUrl + '/' + selectedTopicName;
  46. var promise = ajaxService.ajax({
  47. 'dataType': 'json',
  48. 'type': 'DELETE',
  49. 'data': {},
  50. 'url': deleteTopicsUrl
  51. });
  52. return Q.when(promise);
  53. },
  54. _getDefaultTopicDescription: function _getDefaultTopicDescription(selectedTopicName) {
  55. var ajaxService = this.glassContext.services.ajax;
  56. var getTopicsUrl = this.builtinTopicUrl + '/' + selectedTopicName;
  57. var promise = ajaxService.ajax({
  58. 'dataType': 'json',
  59. 'type': 'GET',
  60. 'data': {},
  61. 'url': getTopicsUrl
  62. });
  63. return promise.then(function (object) {
  64. return object;
  65. }.bind(this));
  66. },
  67. _getAddOnTopicDescription: function _getAddOnTopicDescription(selectedTopicName) {
  68. var ajaxService = this.glassContext.services.ajax;
  69. var getTopicsUrl = this.customTopicUrl + '/' + selectedTopicName;
  70. var promise = ajaxService.ajax({
  71. 'dataType': 'json',
  72. 'type': 'GET',
  73. 'data': {},
  74. 'url': getTopicsUrl
  75. });
  76. return promise.then(function (object) {
  77. return object;
  78. }.bind(this));
  79. },
  80. _getFavouriteTopicList: function _getFavouriteTopicList() {
  81. var ajaxService = this.glassContext.services.ajax;
  82. var promise = ajaxService.ajax({
  83. 'dataType': 'json',
  84. 'type': 'GET',
  85. 'data': {},
  86. 'url': this.builtinTopicUrl
  87. });
  88. return promise.then(function (list) {
  89. var resultList = this._buildFavouriteTopicList();
  90. return resultList;
  91. }.bind(this));
  92. },
  93. _buildFavouriteTopicList: function _buildFavouriteTopicList() {
  94. var resultList = [];
  95. for (var i = 0; i < this.favouriteTopicList.length; i++) {
  96. var topic = {
  97. name: StringResource.get(this.favouriteTopicList[i]),
  98. id: this.favouriteTopicList[i]
  99. };
  100. resultList.push(topic);
  101. }
  102. return resultList;
  103. },
  104. _getDefaultTopicList: function _getDefaultTopicList() {
  105. var ajaxService = this.glassContext.services.ajax;
  106. var promise = ajaxService.ajax({
  107. 'dataType': 'json',
  108. 'type': 'GET',
  109. 'data': {},
  110. 'url': this.builtinTopicUrl
  111. });
  112. return promise.then(function (list) {
  113. var array = list['topicNames'];
  114. var resultList = [];
  115. for (var i = 0; i < array.length; i++) {
  116. var topic = {
  117. name: StringResource.get(array[i]),
  118. id: array[i]
  119. };
  120. resultList.push(topic);
  121. }
  122. return resultList;
  123. }.bind(this));
  124. },
  125. _getAddOnTopicList: function _getAddOnTopicList() {
  126. var ajaxService = this.glassContext.services.ajax;
  127. var promise = ajaxService.ajax({
  128. 'dataType': 'json',
  129. 'type': 'GET',
  130. 'data': {},
  131. 'url': this.customTopicUrl
  132. });
  133. return promise.then(function (list) {
  134. var array = list['topicNames'];
  135. var resultList = [];
  136. for (var i = 0; i < array.length; i++) {
  137. var topic = {
  138. name: StringResource.get(array[i]),
  139. id: array[i]
  140. };
  141. resultList.push(topic);
  142. }
  143. return resultList;
  144. }.bind(this));
  145. },
  146. _UpdateOrUploadHelper: function _UpdateOrUploadHelper(options, type) {
  147. var ajaxService = this.glassContext.services.ajax;
  148. var url = this.customTopicUrl + '/' + options.fileName;
  149. var msg = {
  150. 'code': '',
  151. 'msg': options.fileName,
  152. 'options': options
  153. };
  154. var ajaxOptions = {
  155. 'type': type,
  156. 'headers': {
  157. 'Accept': 'application/json',
  158. 'Content-Type': 'application/json'
  159. },
  160. 'url': url,
  161. 'data': options.data,
  162. 'Content-Length': options.byteLength,
  163. 'processData': false,
  164. success: function success(data, textStatus, jqXHR) {
  165. msg.code = jqXHR.status;
  166. msg.responseText = jqXHR.responseText;
  167. },
  168. error: function error(jqXHR) {
  169. msg.code = jqXHR.status;
  170. msg.responseText = jqXHR.responseText;
  171. }
  172. };
  173. var promise = ajaxService.ajax(ajaxOptions);
  174. return promise.always(function () {
  175. return this.renderResponse(msg);
  176. }.bind(this));
  177. },
  178. _updateOrUpload: function _updateOrUpload(options) {
  179. return this._UpdateOrUploadHelper(options, 'POST');
  180. },
  181. _updateFromUpload: function _updateFromUpload(options) {
  182. return this._UpdateOrUploadHelper(options, 'PUT');
  183. },
  184. _uploadForUpdate: function _uploadForUpdate(options) {
  185. var oDialog = new ConfirmationDialog('confirmUpdate', StringResource.get('confirmUpdate'), StringResource.get('confirmUpdateMessage', {
  186. 'topicName': options.fileName
  187. }));
  188. oDialog.confirm(function () {
  189. this._updateFromUpload(options).then(function () {}.bind(this), function (ajaxObj, err) {
  190. this.glassContext.appController.showErrorMessage(AJAXUtils.buildErrorMessage(err.responseJSON.errors), StringResource.get('error'));
  191. }.bind(this));
  192. }.bind(this));
  193. oDialog.renderContent($('<div>'));
  194. },
  195. renderErrorMessage: function renderErrorMessage(responseText) {
  196. var errorMsg;
  197. var message = JSON.parse(responseText).messages;
  198. errorMsg = StringResource.get(message[0].messageKey, {
  199. 'loggerName': message[0].params[0]
  200. });
  201. return errorMsg;
  202. },
  203. renderErrorResponse: function renderErrorResponse(msg) {
  204. var sText;
  205. if (msg.code === 409 && !_.isUndefined(msg.options)) {
  206. return this._uploadForUpdate(msg.options);
  207. } else {
  208. sText = this.renderErrorMessage(msg.responseText);
  209. }
  210. return this.glassContext.appController.showErrorMessage(sText, StringResource.get('error'));
  211. },
  212. renderSuccessResponse: function renderSuccessResponse(msg) {
  213. var sText;
  214. if (msg.code === 201) {
  215. sText = StringResource.get('topicCreateMsg', {
  216. 'topicName': msg.msg
  217. });
  218. } else if (msg.code === 200) {
  219. sText = StringResource.get('topicUpdateMsg', {
  220. 'topicName': msg.msg
  221. });
  222. }
  223. return this.glassContext.appController.showToast(sText, {
  224. 'type': 'success'
  225. });
  226. },
  227. renderResponse: function renderResponse(msg) {
  228. if (msg.code >= 400) {
  229. return this.renderErrorResponse(msg);
  230. } else if (msg.code >= 200) {
  231. return this.renderSuccessResponse(msg);
  232. }
  233. }
  234. });
  235. return TopicsListController;
  236. });