ExtensionsHelper.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. 2018
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. define(['../../lib/@waca/core-client/js/core-client/utils/ClassFactory', 'underscore'], function (ClassFactory, _) {
  9. /**
  10. * Helper class used to create the required dashboard extensions.
  11. * This includes the board model, layout and canvas extensions as well as the dashboard service extensions.
  12. */
  13. var ExtensionHelper = function () {
  14. function ExtensionHelper(dashboardApi) {
  15. _classCallCheck(this, ExtensionHelper);
  16. this.dashboardApi = dashboardApi;
  17. this.logger = this.dashboardApi.getGlassCoreSvc('.Logger');
  18. }
  19. ExtensionHelper.prototype.registerExtensions = function registerExtensions() {
  20. return Promise.all([this._getLayoutExtensions(), this._getCanvasExtensions()]).then(function (result) {
  21. return result;
  22. }.bind(this));
  23. };
  24. ExtensionHelper.prototype._getLayoutExtensions = function _getLayoutExtensions() {
  25. var _this = this;
  26. var promise = Promise.resolve();
  27. var layoutExtensions = this.dashboardApi.getCollectionConfig('layoutExtension');
  28. if (layoutExtensions) {
  29. var collectionId = layoutExtensions.id;
  30. promise = Promise.all([this.dashboardApi.findGlassCollection(collectionId)]).then(function (collections) {
  31. var collection = collections[0] || [];
  32. return _this.loadLayoutModelExtensions(collection);
  33. });
  34. }
  35. return promise;
  36. };
  37. ExtensionHelper.prototype.loadLayoutModelExtensions = function loadLayoutModelExtensions(collections) {
  38. var combinedExtensions = this._combineLayoutModelExtensions(collections);
  39. return this._loadModelExtensions(combinedExtensions);
  40. };
  41. ExtensionHelper.prototype._combineLayoutModelExtensions = function _combineLayoutModelExtensions(collection) {
  42. var combinedExtensions = {};
  43. //this is where it gets squirrely, we should edevour to simplify this... Yeah, and when monkeys fly
  44. collection.forEach(function (entry) {
  45. var extensions = entry.extensions;
  46. Object.keys(extensions).forEach(function (key) {
  47. var layoutMode = extensions[key];
  48. if (!combinedExtensions[key]) {
  49. combinedExtensions[key] = {};
  50. }
  51. Object.keys(layoutMode).forEach(function (layoutKey) {
  52. combinedExtensions[key][layoutKey] = layoutMode[layoutKey];
  53. });
  54. });
  55. });
  56. return combinedExtensions;
  57. };
  58. ExtensionHelper.prototype._loadModelExtensions = function _loadModelExtensions(layoutExtensions) {
  59. var modelExtensions = layoutExtensions.modelExtensions;
  60. if (modelExtensions) {
  61. var logger = this.logger;
  62. return Promise.all(Object.keys(modelExtensions).map(function (key) {
  63. return ClassFactory.loadModule(modelExtensions[key]).then(function (module) {
  64. var _ref;
  65. return _ref = {}, _ref[key] = module, _ref;
  66. }).catch(function (err) {
  67. logger.error(err);
  68. return {};
  69. });
  70. })).then(function (results) {
  71. // each array member contains a single key/value so we merge them all into 1 object;
  72. layoutExtensions.modelExtensions = _.extend.apply(_, results);
  73. return layoutExtensions;
  74. });
  75. }
  76. return Promise.resolve(layoutExtensions);
  77. };
  78. ExtensionHelper.prototype._getCanvasExtensions = function _getCanvasExtensions() {
  79. var promise;
  80. var canvasExtension = this.dashboardApi.getCollectionConfig('canvasExtension');
  81. if (canvasExtension) {
  82. var collectionId = canvasExtension.id;
  83. promise = Promise.all([this.dashboardApi.findGlassCollection(collectionId)]).then(function (collections) {
  84. var canvasExtensions = [];
  85. if (collections.length > 0 && collections[0]) {
  86. collections[0].forEach(function (collection) {
  87. canvasExtensions.push(collection);
  88. }.bind(this));
  89. }
  90. return canvasExtensions;
  91. }.bind(this));
  92. }
  93. return promise || Promise.resolve();
  94. };
  95. ExtensionHelper.prototype.getBoardModelExtensions = function getBoardModelExtensions() {
  96. var boardModelCollection = this.dashboardApi.getCollectionConfig('boardModel');
  97. var collectionId = boardModelCollection.id;
  98. return this.dashboardApi.findGlassCollection(collectionId).then(function (extensionCollection) {
  99. return this._loadBoardModelExtensions(extensionCollection);
  100. }.bind(this));
  101. };
  102. ExtensionHelper.prototype.loadBoardModelExtensions = function loadBoardModelExtensions(extensionsCollection) {
  103. return this._loadBoardModelExtensions(extensionsCollection);
  104. };
  105. ExtensionHelper.prototype._loadBoardModelExtensions = function _loadBoardModelExtensions(extensionCollection) {
  106. if (!extensionCollection) {
  107. return;
  108. }
  109. var promises = [];
  110. extensionCollection.forEach(function (extensionObj) {
  111. if (!extensionObj.name || !extensionObj.class) {
  112. return;
  113. }
  114. promises.push(ClassFactory.loadModule(extensionObj.class).then(function (ModelExtension) {
  115. return {
  116. 'name': extensionObj.name,
  117. 'type': extensionObj.type || 'model',
  118. 'class': ModelExtension,
  119. 'triggers': extensionObj.triggers || [],
  120. // backward compatible default is true unless value is explicitly false.
  121. 'autoCreate': extensionObj.autoCreate !== false
  122. };
  123. }.bind(this)).catch(function (error) {
  124. this.logger.error(error);
  125. }.bind(this)));
  126. }, this);
  127. return Promise.all(promises).then(function (results) {
  128. // Failed promises will return an undefined extension in the results. Make sure we filter it out
  129. return results.filter(function (n) {
  130. return n != undefined;
  131. });
  132. });
  133. };
  134. return ExtensionHelper;
  135. }();
  136. return ExtensionHelper;
  137. });
  138. //# sourceMappingURL=ExtensionsHelper.js.map