QueryService.js 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. 'use strict';
  2. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  3. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  4. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  5. /**
  6. * Licensed Materials - Property of IBM
  7. * IBM Cognos Products: Dashboard
  8. * (C) Copyright IBM Corp. 2018, 2020
  9. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  10. */
  11. define(['../../../lib/@waca/dashboard-common/dist/core/APIFactory', '../../../widgets/livewidget/query/CommonQueryHelper', './QueryResultData', './Query', './api/QueryServiceAPI'], function (APIFactory, CommonQueryHelper, QueryResultData, Query, QueryServiceAPI) {
  12. var QueryService = function (_CommonQueryHelper) {
  13. _inherits(QueryService, _CommonQueryHelper);
  14. function QueryService(options) {
  15. _classCallCheck(this, QueryService);
  16. var internalQueryService = options.features['QueryService.internal'];
  17. var _this = _possibleConstructorReturn(this, _CommonQueryHelper.call(this, {
  18. queryService: internalQueryService
  19. }, options.features['Logger']));
  20. _this.internalQueryService = internalQueryService;
  21. _this.dashboard = options.features['API'];
  22. return _this;
  23. }
  24. QueryService.prototype._runQuery = function _runQuery(sourceIdOrModule, querySpec) {
  25. return this.queryService.executeQuery(sourceIdOrModule, querySpec).then(function (queryResponses) {
  26. var queryResult = new QueryResultData(queryResponses.data);
  27. queryResult.setPropertyValue('QuerySpec.internal', JSON.stringify(querySpec));
  28. // Today we don't have access to the raw resposne becasue we use MUI to get the data
  29. // TODO We should call the ajax service ourself and stop relying on MUI.
  30. queryResult.setPropertyValue('RawData.internal', JSON.stringify(queryResponses.data));
  31. queryResult.setPropertyValue('RequestTime.internal', queryResponses.requestTime || null);
  32. return queryResult.getAPI();
  33. });
  34. };
  35. QueryService.prototype.getAPI = function getAPI() {
  36. if (!this.queryServiceAPI) {
  37. this.queryServiceAPI = APIFactory.createAPI(this, [QueryServiceAPI]);
  38. }
  39. return this.queryServiceAPI;
  40. };
  41. QueryService.prototype.executeQuery = function executeQuery(sourceId, querySpec, senderId, requestOptions) {
  42. return this.internalQueryService.executeQuery(sourceId, querySpec, senderId, requestOptions).then(function (queryResultData) {
  43. var queryResult = new QueryResultData(queryResultData.data);
  44. queryResult.setPropertyValue('QuerySpec.internal', JSON.stringify(querySpec));
  45. // Today we don't have access to the raw resposne becasue we use MUI to get the data
  46. // TODO We should call the ajax service ourself and stop relying on MUI.
  47. queryResult.setPropertyValue('RawData.internal', JSON.stringify(queryResultData.data));
  48. queryResult.setPropertyValue('RequestTime.internal', queryResultData.requestTime || null);
  49. return queryResult.getAPI();
  50. });
  51. };
  52. QueryService.prototype.createQuery = function createQuery(type) {
  53. var query = new Query(this.dashboard, this, type);
  54. return query.getAPI();
  55. };
  56. QueryService.prototype.getColumnValues = function getColumnValues(sourceId) {
  57. var itemIdList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  58. var filterList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
  59. var sort = arguments[3];
  60. var searchTermList = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
  61. var aggregationList = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
  62. if (!Array.isArray(itemIdList)) {
  63. itemIdList = [itemIdList];
  64. }
  65. var query = this.createQuery();
  66. return query.setDataSource(sourceId).then(function () {
  67. var dataItems = query.addColumns(itemIdList);
  68. dataItems.forEach(function (dataItem, i) {
  69. if (!dataItem.getSort() && sort) {
  70. dataItem.setSort({ type: sort });
  71. }
  72. //since we're expecting to see discrete set of values in the filter flyout, set the aggregation to null here
  73. dataItem.setAggregation(aggregationList && aggregationList[i] || null);
  74. if (searchTermList.length > 0) {
  75. query.addSearchTerms(dataItem.getColumnId(), searchTermList);
  76. }
  77. });
  78. query.addFilters(filterList);
  79. return query.executeQuery();
  80. });
  81. };
  82. QueryService.prototype.getColumnMinMaxValues = function getColumnMinMaxValues(sourceId, itemId) {
  83. var filters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
  84. var query = this.createQuery();
  85. return query.setDataSource(sourceId).then(function () {
  86. var dataItems = query.addColumns([itemId, itemId]);
  87. dataItems[0].setAggregation('min');
  88. dataItems[1].setAggregation('max');
  89. if (filters.length) {
  90. query.addFilters(filters);
  91. }
  92. return query.executeQuery();
  93. });
  94. };
  95. QueryService.prototype.getDataItemsMinMaxValues = function getDataItemsMinMaxValues(sourceId, dataItems, projections, filterList) {
  96. var query = this.createQuery('minmax');
  97. return query.setDataSource(sourceId).then(function () {
  98. dataItems.forEach(function (dataItem) {
  99. var columnId = dataItem.getColumnId();
  100. if (columnId) {
  101. var queryDataItems = query.addColumns([columnId]);
  102. var queryDataItem = queryDataItems[queryDataItems.length - 1];
  103. queryDataItem.setType(dataItem.getType());
  104. var isProjected = projections.indexOf(dataItem.getId()) !== -1;
  105. if (isProjected) {
  106. queryDataItem.setAggregation(dataItem.getAggregation());
  107. }
  108. queryDataItem.setProjected(isProjected);
  109. }
  110. });
  111. if (filterList && filterList.length) {
  112. query.addFilters(filterList);
  113. }
  114. return query.executeQuery();
  115. });
  116. };
  117. QueryService.prototype.getRootMembers = function getRootMembers(sourceId) {
  118. var itemIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  119. var filters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
  120. var rowLimit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 51;
  121. if (!Array.isArray(itemIds)) {
  122. itemIds = [itemIds];
  123. }
  124. var query = this.createQuery();
  125. return query.setDataSource(sourceId).then(function () {
  126. var dataItems = query.addColumns(itemIds);
  127. dataItems.forEach(function (dataItem) {
  128. dataItem.addCommand({
  129. operation: 'add',
  130. rootMembers: 'true'
  131. });
  132. });
  133. query.addFilters(filters);
  134. query.setLimit(rowLimit);
  135. return query.executeQuery();
  136. });
  137. };
  138. QueryService.prototype.getChildren = function getChildren(sourceId) {
  139. var itemIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  140. var memberId = arguments[2];
  141. var filters = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
  142. var rowLimit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 51;
  143. var offset = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
  144. if (!Array.isArray(itemIds)) {
  145. itemIds = [itemIds];
  146. }
  147. var query = this.createQuery();
  148. return query.setDataSource(sourceId).then(function () {
  149. var dataItems = query.addColumns(itemIds);
  150. dataItems.forEach(function (dataItem) {
  151. dataItem.addCommand({
  152. operation: 'add',
  153. children: memberId
  154. });
  155. });
  156. query.addFilters(filters);
  157. query.setLimit(rowLimit);
  158. query.setOffset(offset);
  159. return query.executeQuery();
  160. });
  161. };
  162. QueryService.prototype.getAscendants = function getAscendants(sourceId) {
  163. var itemIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  164. var memberIds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
  165. var filters = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
  166. if (!Array.isArray(itemIds)) {
  167. itemIds = [itemIds];
  168. }
  169. var query = this.createQuery();
  170. return query.setDataSource(sourceId).then(function () {
  171. var dataItems = query.addColumns(itemIds);
  172. dataItems.forEach(function (dataItem) {
  173. dataItem.addCommand({
  174. operation: 'add',
  175. ascendants: memberIds
  176. });
  177. });
  178. query.addFilters(filters);
  179. return query.executeQuery();
  180. });
  181. };
  182. // See FilterQueryHelper.getSiblings for notes
  183. QueryService.prototype.getSiblings = function getSiblings(sourceId) {
  184. var itemIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  185. var memberId = arguments[2];
  186. var filters = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
  187. var rowLimit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 51;
  188. if (!Array.isArray(itemIds)) {
  189. itemIds = [itemIds];
  190. }
  191. var query = this.createQuery();
  192. return query.setDataSource(sourceId).then(function () {
  193. var dataItems = query.addColumns(itemIds);
  194. dataItems.forEach(function (dataItem) {
  195. dataItem.addCommand({
  196. operation: 'add',
  197. siblings: memberId
  198. });
  199. });
  200. query.addFilters(filters);
  201. query.setLimit(rowLimit);
  202. return query.executeQuery();
  203. });
  204. };
  205. return QueryService;
  206. }(CommonQueryHelper);
  207. return QueryService;
  208. });
  209. //# sourceMappingURL=QueryService.js.map