MetadataDNDMapping.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. 'use strict';
  2. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  3. /**
  4. * Licensed Materials - Property of IBM
  5. * IBM Cognos Products: BI Cloud (C) Copyright IBM Corp. 2019, 2020
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. define(['underscore', '../dataSources/metadata/MetadataColumn', 'bi/moser/moser.min'], function (_, MetadataColumn, MoserJS) {
  9. var SUPPORTED_SOURCE_CATEGORY_TYPES = [MoserJS.default.SourceCategoryType.HIERARCHY_LEVEL, MoserJS.default.SourceCategoryType.HIERARCHY_PARENT_CHILD, //member based hierachy, always return a hieararchy since there are no levels
  10. MoserJS.default.SourceCategoryType.LEVEL, MoserJS.default.SourceCategoryType.COLUMN //@todo return null what do we do so does it break R3?
  11. ];
  12. var ANCESTOR_TYPES = [MoserJS.default.MoserObjectTypes.QUERY_ITEM];
  13. /**
  14. * Limitations enforce by DSS:
  15. *
  16. * Cannot drop level and hierarchy to same slot
  17. * Cannot drop multiple hiearachies in same dimension: eg Years and Currently
  18. * Can drop different hieararchies from differnt dimensions : eg Years and Product
  19. *
  20. * Just document the limitations here since these should have already handle by drag and drop in R3
  21. */
  22. return function () {
  23. function MetadataDNDMapping(moduleAPI, dashboard) {
  24. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  25. _classCallCheck(this, MetadataDNDMapping);
  26. this.moduleAPI = moduleAPI;
  27. this.dashboard = dashboard;
  28. this.dataSource = this.dashboard.getFeature('DataSources').getDataSource(moduleAPI.getSourceId());
  29. this.moserObjects = options.moserObjects || [];
  30. this.dNDResults = [];
  31. this._processMetadataMapping();
  32. }
  33. MetadataDNDMapping.prototype.getMappedResults = function getMappedResults() {
  34. return this.dNDResults;
  35. };
  36. MetadataDNDMapping.prototype.getUtils = function getUtils() {
  37. return {
  38. getColumnsWithMembers: this.getColumnsWithMembers.bind(this)
  39. };
  40. };
  41. MetadataDNDMapping.prototype.getColumnsWithMembers = function getColumnsWithMembers() {
  42. var filterMemberColumns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
  43. var columnsWithMembers = {};
  44. _.each(this.dNDResults, function (result) {
  45. var metadataColumn = result.mappedMetadataColumn;
  46. var members = result.members;
  47. // Refer to members since it's mapped from a member.
  48. if (metadataColumn) {
  49. if (!filterMemberColumns || members.length) {
  50. columnsWithMembers[metadataColumn.getId()] = members;
  51. }
  52. }
  53. });
  54. return columnsWithMembers;
  55. };
  56. MetadataDNDMapping.prototype._processMetadataMapping = function _processMetadataMapping() {
  57. var _this = this;
  58. this.moserObjects.forEach(function (moserObject) {
  59. var payload = {};
  60. var sourceCategory = void 0;
  61. var mappedMoserObject = void 0;
  62. if (!_this._isMemberType(moserObject)) {
  63. mappedMoserObject = moserObject;
  64. } else {
  65. var searchMoserObject = _this._memberSearchSubject();
  66. mappedMoserObject = _this._getMappedMoserObject(moserObject, searchMoserObject);
  67. if (mappedMoserObject) {
  68. sourceCategory = _this._getSourceCategory(mappedMoserObject);
  69. if (SUPPORTED_SOURCE_CATEGORY_TYPES.indexOf(sourceCategory) !== -1) {
  70. payload.members = {
  71. id: moserObject.getIdForExpression(),
  72. memberCaption: moserObject.getMemberCaption() //example Camping Equipment
  73. };
  74. mappedMoserObject = _this._normalizeMappedMoserObject(mappedMoserObject, moserObject, sourceCategory);
  75. } else {
  76. //@todo not sure what this this so add to be save
  77. mappedMoserObject = moserObject;
  78. }
  79. } else {
  80. /*Get here when one of the following is true:
  81. *
  82. * 1. Select Product line from a relation source
  83. * 2. A measure like Revenue from relational source
  84. * 3. A measure like Revenue from OLAP source
  85. */
  86. mappedMoserObject = moserObject;
  87. }
  88. }
  89. // query item from navigation group is a referenced object
  90. var referencedObject = mappedMoserObject.getReferencedObject ? mappedMoserObject.getReferencedObject() : null;
  91. if (referencedObject) {
  92. payload.referencedObject = _this.dataSource.getMetadataColumn(referencedObject.getIdForExpression());
  93. }
  94. payload.mappedMetadataColumn = _this.dataSource.getMetadataColumn(mappedMoserObject.getIdForExpression());
  95. _this._addDNDResult(payload);
  96. });
  97. };
  98. MetadataDNDMapping.prototype._getSourceCategory = function _getSourceCategory(mappedMoserObject) {
  99. var sourceCategory = mappedMoserObject.getSourceCategory();
  100. if (!sourceCategory && mappedMoserObject.getObjectType() === MoserJS.default.MoserObjectTypes.QUERY_ITEM) {
  101. sourceCategory = MoserJS.default.SourceCategoryType.COLUMN;
  102. }
  103. return sourceCategory;
  104. };
  105. MetadataDNDMapping.prototype._getMappedMoserObject = function _getMappedMoserObject(moserObject, searchMoserObject) {
  106. if (!searchMoserObject) {
  107. //Note drag members from the rootMember, this function also return a level so it treats rootMember as like any other regular level
  108. return MoserJS.default.ModuleUtils.getTreeAncestor(moserObject, ANCESTOR_TYPES);
  109. } else if (searchMoserObject && this._isMemberType(searchMoserObject)) {
  110. return MoserJS.default.ModuleUtils.getTreeAncestor(searchMoserObject, ANCESTOR_TYPES);
  111. }
  112. return searchMoserObject;
  113. };
  114. MetadataDNDMapping.prototype._memberSearchSubject = function _memberSearchSubject() {
  115. return this.moduleAPI.getShapingHelper().getMemberSearchSubject();
  116. };
  117. MetadataDNDMapping.prototype._isMemberType = function _isMemberType(moserObject) {
  118. return moserObject.getObjectType() === 'MemberType';
  119. };
  120. MetadataDNDMapping.prototype._normalizeMappedMoserObject = function _normalizeMappedMoserObject(mappedMoserObject, moserObject, sourceCategory) {
  121. if (sourceCategory === MoserJS.default.SourceCategoryType.LEVEL) {
  122. var metadataColumn = this.moduleAPI.getMetadataColumn(moserObject.getLevelUniqueName());
  123. return metadataColumn.moserObject;
  124. }
  125. return mappedMoserObject;
  126. };
  127. MetadataDNDMapping.prototype._addDNDResult = function _addDNDResult() {
  128. var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  129. var dnDResult = this.dNDResults.find(function (result) {
  130. if (payload.mappedMetadataColumn && result.mappedMetadataColumn) {
  131. return result.mappedMetadataColumn.getId() === payload.mappedMetadataColumn.getId();
  132. } else {
  133. return false;
  134. }
  135. });
  136. if (dnDResult) {
  137. if (payload.members) {
  138. // Add local filter payload has filter built from member.
  139. dnDResult.members.push(payload.members);
  140. }
  141. } else {
  142. payload.members = payload.members ? [payload.members] : [];
  143. this.dNDResults.push(payload);
  144. }
  145. };
  146. return MetadataDNDMapping;
  147. }();
  148. });
  149. //# sourceMappingURL=MetadataDNDMapping.js.map