'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Licensed Materials - Property of IBM * IBM Cognos Products: BI Cloud (C) Copyright IBM Corp. 2018 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ define(['../../lib/@waca/core-client/js/core-client/utils/ClassFactory', 'underscore'], function (ClassFactory, _) { /** * Helper class used to create the required dashboard extensions. * This includes the board model, layout and canvas extensions as well as the dashboard service extensions. */ var ExtensionHelper = function () { function ExtensionHelper(dashboardApi) { _classCallCheck(this, ExtensionHelper); this.dashboardApi = dashboardApi; this.logger = this.dashboardApi.getGlassCoreSvc('.Logger'); } ExtensionHelper.prototype.registerExtensions = function registerExtensions() { return Promise.all([this._getLayoutExtensions(), this._getCanvasExtensions()]).then(function (result) { return result; }.bind(this)); }; ExtensionHelper.prototype._getLayoutExtensions = function _getLayoutExtensions() { var _this = this; var promise = Promise.resolve(); var layoutExtensions = this.dashboardApi.getCollectionConfig('layoutExtension'); if (layoutExtensions) { var collectionId = layoutExtensions.id; promise = Promise.all([this.dashboardApi.findGlassCollection(collectionId)]).then(function (collections) { var collection = collections[0] || []; return _this.loadLayoutModelExtensions(collection); }); } return promise; }; ExtensionHelper.prototype.loadLayoutModelExtensions = function loadLayoutModelExtensions(collections) { var combinedExtensions = this._combineLayoutModelExtensions(collections); return this._loadModelExtensions(combinedExtensions); }; ExtensionHelper.prototype._combineLayoutModelExtensions = function _combineLayoutModelExtensions(collection) { var combinedExtensions = {}; //this is where it gets squirrely, we should edevour to simplify this... Yeah, and when monkeys fly collection.forEach(function (entry) { var extensions = entry.extensions; Object.keys(extensions).forEach(function (key) { var layoutMode = extensions[key]; if (!combinedExtensions[key]) { combinedExtensions[key] = {}; } Object.keys(layoutMode).forEach(function (layoutKey) { combinedExtensions[key][layoutKey] = layoutMode[layoutKey]; }); }); }); return combinedExtensions; }; ExtensionHelper.prototype._loadModelExtensions = function _loadModelExtensions(layoutExtensions) { var modelExtensions = layoutExtensions.modelExtensions; if (modelExtensions) { var logger = this.logger; return Promise.all(Object.keys(modelExtensions).map(function (key) { return ClassFactory.loadModule(modelExtensions[key]).then(function (module) { var _ref; return _ref = {}, _ref[key] = module, _ref; }).catch(function (err) { logger.error(err); return {}; }); })).then(function (results) { // each array member contains a single key/value so we merge them all into 1 object; layoutExtensions.modelExtensions = _.extend.apply(_, results); return layoutExtensions; }); } return Promise.resolve(layoutExtensions); }; ExtensionHelper.prototype._getCanvasExtensions = function _getCanvasExtensions() { var promise; var canvasExtension = this.dashboardApi.getCollectionConfig('canvasExtension'); if (canvasExtension) { var collectionId = canvasExtension.id; promise = Promise.all([this.dashboardApi.findGlassCollection(collectionId)]).then(function (collections) { var canvasExtensions = []; if (collections.length > 0 && collections[0]) { collections[0].forEach(function (collection) { canvasExtensions.push(collection); }.bind(this)); } return canvasExtensions; }.bind(this)); } return promise || Promise.resolve(); }; ExtensionHelper.prototype.getBoardModelExtensions = function getBoardModelExtensions() { var boardModelCollection = this.dashboardApi.getCollectionConfig('boardModel'); var collectionId = boardModelCollection.id; return this.dashboardApi.findGlassCollection(collectionId).then(function (extensionCollection) { return this._loadBoardModelExtensions(extensionCollection); }.bind(this)); }; ExtensionHelper.prototype.loadBoardModelExtensions = function loadBoardModelExtensions(extensionsCollection) { return this._loadBoardModelExtensions(extensionsCollection); }; ExtensionHelper.prototype._loadBoardModelExtensions = function _loadBoardModelExtensions(extensionCollection) { if (!extensionCollection) { return; } var promises = []; extensionCollection.forEach(function (extensionObj) { if (!extensionObj.name || !extensionObj.class) { return; } promises.push(ClassFactory.loadModule(extensionObj.class).then(function (ModelExtension) { return { 'name': extensionObj.name, 'type': extensionObj.type || 'model', 'class': ModelExtension, 'triggers': extensionObj.triggers || [], // backward compatible default is true unless value is explicitly false. 'autoCreate': extensionObj.autoCreate !== false }; }.bind(this)).catch(function (error) { this.logger.error(error); }.bind(this))); }, this); return Promise.all(promises).then(function (results) { // Failed promises will return an undefined extension in the results. Make sure we filter it out return results.filter(function (n) { return n != undefined; }); }); }; return ExtensionHelper; }(); return ExtensionHelper; }); //# sourceMappingURL=ExtensionsHelper.js.map