SmartsVisRecommenderService.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. 'use strict';
  2. /*
  3. *+------------------------------------------------------------------------+
  4. *| Licensed Materials - Property of IBM
  5. *| IBM Cognos Products: Dashboard
  6. *| (C) Copyright IBM Corp. 2017, 2020
  7. *|
  8. *| US Government Users Restricted Rights - Use, duplication or disclosure
  9. *| restricted by GSA ADP Schedule Contract with IBM Corp.
  10. *+------------------------------------------------------------------------+
  11. */
  12. define(['./SmartsRecommenderService', './SmartsRecommenderError'], function (BaseService, SmartsError) {
  13. 'use strict';
  14. var SMARTS_ROOT = 'v1/smarts';
  15. var CHART_INFO = SMARTS_ROOT + '/visualization-recommender/chartInfo';
  16. var ALTERNATE_VISUALIZATION_URL = SMARTS_ROOT + '/visualization-recommender/recommend';
  17. var RELATED_VISUALIZATION_URL = SMARTS_ROOT + '/insights/related-visualizations';
  18. // This Smarts API will return first vis as the best vis for target fields, and other vis for related fields
  19. // of the target fields
  20. var RECOMMENDER_RELATED_VISUALIZATION_URL = SMARTS_ROOT + '/explore/related-visualizations';
  21. var RECOMMENDER_COMPARE_VISUALIZATION_URL = SMARTS_ROOT + '/content-recommender/comparison';
  22. var SmartsVisRecommenderService = BaseService.extend({
  23. init: function init(options) {
  24. SmartsVisRecommenderService.inherited('init', this, arguments);
  25. this.ajaxSvc = options.ajaxSvc;
  26. this.logger = options.logger;
  27. },
  28. /**
  29. * Get result from chartInfo endpoint
  30. */
  31. getChartInfo: function getChartInfo(requestParams) {
  32. this.logger.debug('getRecommendInfo');
  33. return this._executeRequest(requestParams, CHART_INFO).catch(this._handleError.bind(this)).then(function (_ref) {
  34. var data = _ref.data;
  35. if (data.smartsStatus !== SmartsError.STATUS.OK) {
  36. throw new SmartsError(data.smartsStatus, data.details);
  37. }
  38. // Recommender may return more than one answer that matches the same slot mappings.
  39. // In some cases it may return those mappings plus unmapped slots with the 'mandatorySlotMissing' Flag set.
  40. // Give preference to the first complete one as the title source (unless no complete ones are returned).
  41. var chartInfo = data;
  42. if (data.recommendations) {
  43. var completeRecommendations = data.recommendations.filter(function (recommendation) {
  44. return !recommendation.mandatorySlotsMissing;
  45. });
  46. chartInfo = completeRecommendations && completeRecommendations.length ? completeRecommendations[0] : data.recommendations[0];
  47. }
  48. return {
  49. title: chartInfo.title,
  50. label: chartInfo.label,
  51. description: chartInfo.description,
  52. mandatorySlotsMissing: chartInfo.mandatorySlotsMissing
  53. };
  54. });
  55. },
  56. recommendAlternateVisualizationsOrBindings: function recommendAlternateVisualizationsOrBindings(requestParams) {
  57. this.logger.debug('recommendAlternateVisualizationsOrBindings');
  58. return this._executeRequest(requestParams, ALTERNATE_VISUALIZATION_URL).catch(this._handleError.bind(this)).then(this._processResponse.bind(this));
  59. },
  60. recommendRelatedVisualizations: function recommendRelatedVisualizations(requestParams) {
  61. var url = RELATED_VISUALIZATION_URL;
  62. if (requestParams.includeBestVisForTargetFields) {
  63. url = RECOMMENDER_RELATED_VISUALIZATION_URL;
  64. }
  65. this.logger.debug('recommendRelatedVisualizations');
  66. return this._executeRequest(requestParams, url).catch(this._handleError.bind(this)).then(this._processResponse.bind(this));
  67. },
  68. recommendCompareVisualizations: function recommendCompareVisualizations(requestParams) {
  69. var url = RECOMMENDER_COMPARE_VISUALIZATION_URL;
  70. this.logger.debug('recommendCompareVisualizations');
  71. return this._executeRequest(requestParams, url).catch(this._handleError.bind(this)).then(this._processCompareResponse.bind(this));
  72. },
  73. _processResponse: function _processResponse(ajaxResponse) {
  74. var recommenderResponse = ajaxResponse.data;
  75. if (recommenderResponse.smartsStatus === SmartsError.STATUS.OK) {
  76. return recommenderResponse.recommendations;
  77. } else {
  78. throw new SmartsError(recommenderResponse.smartsStatus, recommenderResponse.details);
  79. }
  80. },
  81. _processCompareResponse: function _processCompareResponse(ajaxResponse) {
  82. var recommenderResponse = ajaxResponse.data;
  83. if (recommenderResponse.status.code === SmartsError.STATUS.OK) {
  84. return recommenderResponse.ircontent;
  85. } else {
  86. throw new SmartsError(recommenderResponse.smartsStatus, recommenderResponse.details);
  87. }
  88. },
  89. _handleError: function _handleError(ajaxError) {
  90. var responseJSON = ajaxError.jqXHR.responseJSON;
  91. this.logger.debug(responseJSON);
  92. if (responseJSON) {
  93. throw new SmartsError(responseJSON.smartsStatus, responseJSON.details);
  94. } else {
  95. throw new SmartsError(ajaxError.jqXHR.fail().status, ajaxError.jqXHR.fail().responseText);
  96. }
  97. }
  98. });
  99. return SmartsVisRecommenderService;
  100. });
  101. //# sourceMappingURL=SmartsVisRecommenderService.js.map