123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- define(['underscore', 'bi/moser/moser.min', '../../apiHelpers/SlotAPIHelper'], function (_, MoserJS, SlotAPIHelper) {
- var _class, _temp;
- var SOURCE_TYPES_TO_VERIFY_JOIN = [MoserJS.default.UseSpecType.FILE.value(), MoserJS.default.UseSpecType.DATASET.value()];
- var DatasourceUtil = (_temp = _class = function () {
- function DatasourceUtil() {
- _classCallCheck(this, DatasourceUtil);
- }
-
- DatasourceUtil._shouldVerifyJoin = function _shouldVerifyJoin(module) {
- var items = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
- var moserDataSources = arguments[2];
- var newAPI = !!(module.getInterfaceType && module.getImplType);
- if (newAPI) {
- var dataSourceId = module.getId();
- var verifyJoin = true;
- for (var i = 0; i < items.length && verifyJoin; i++) {
- var columnId = items[i];
- var metadataColumn = module.getMetadataColumn(columnId);
- var table = metadataColumn ? metadataColumn.getTableName() : null;
- if (!metadataColumn || !table) {
-
- verifyJoin = false;
- break;
- }
- var originalType = moserDataSources.getOriginalSourceType(dataSourceId, columnId);
- if (originalType && SOURCE_TYPES_TO_VERIFY_JOIN.indexOf(originalType) === -1) {
- verifyJoin = false;
- break;
- }
- }
- return verifyJoin;
- } else {
- var theMoserJS = DatasourceUtil.MoserJS_Inst || MoserJS;
- var tables = [];
- return _.find(items, function (columnId) {
- if (!DatasourceUtil.isMultiMeasuresSeriesOrValue(columnId)) {
- var _metadataColumn = module.getMetadataColumn(columnId);
- var _table = _metadataColumn ? _metadataColumn.getTable() : null;
- if (!_metadataColumn || !_table) {
- return true;
- }
-
- if (tables.indexOf(_table.idForExpression) === -1) {
- tables.push(_table.idForExpression);
- var useSpec = theMoserJS.default.ModuleUtils.getObjectUseSpec(_table);
- if (useSpec) {
-
- return SOURCE_TYPES_TO_VERIFY_JOIN.indexOf(useSpec.getType().value()) === -1;
- }
- }
- }
- }) === undefined;
- }
- };
- DatasourceUtil.isMultiMeasuresSeriesOrValue = function isMultiMeasuresSeriesOrValue(itemId) {
- return itemId.indexOf(SlotAPIHelper.MULTI_MEASURES_SERIES) === 0 || itemId.indexOf(SlotAPIHelper.MULTI_MEASURES_VALUE) === 0;
- };
- DatasourceUtil.getTableRef = function getTableRef(dataSource, itemIds) {
- var names = [];
- if (dataSource) {
- itemIds.forEach(function (item) {
- var metadataColumn = dataSource.getMetadataColumn(item);
- var tableName = metadataColumn && metadataColumn.getTableName();
- if (tableName && names.indexOf(tableName) === -1) {
- names.push(tableName);
- }
- });
- }
- return names;
- };
-
- DatasourceUtil.isSupportedNonJoinTableDatascourceType = function isSupportedNonJoinTableDatascourceType(module) {
- var itemIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
- if (!module || module.getSourceType() === 'package' || itemIds.length === 0) {
- return false;
- }
- return DatasourceUtil._shouldVerifyJoin(module, itemIds);
- };
-
- DatasourceUtil.mustVerifyJoinTablesInSameDataSource = function mustVerifyJoinTablesInSameDataSource(dataSource, pageContextItemSpec) {
- var itemIds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
- var moserDataSources = arguments[3];
-
- var dataSourceType = dataSource.getType && dataSource.getType() || dataSource.getSourceType && dataSource.getSourceType();
- if (dataSourceType === 'package') {
- return false;
- }
- var pageContextColumnIds = pageContextItemSpec && pageContextItemSpec.hierarchies && pageContextItemSpec.hierarchies.map(function (h) {
- return h.hierarchyUniqueName;
- }) || pageContextItemSpec && pageContextItemSpec.getItemIds && pageContextItemSpec.getItemIds();
- if (!_.isArray(pageContextColumnIds) || !pageContextColumnIds.length) {
- return false;
- }
- itemIds.push.apply(itemIds, pageContextColumnIds);
- return DatasourceUtil._shouldVerifyJoin(dataSource, itemIds, moserDataSources);
- };
- DatasourceUtil.haveTableJoinsInSameDataSource = function haveTableJoinsInSameDataSource(module, tableNames, otherTableNames) {
-
- var tablesHaveJoinRelationship = module.hasJoinedTables ? module.hasJoinedTables.bind(module) : module.tablesHaveJointRelationship.bind(module);
- var result = _.find(otherTableNames, function (otherTableName) {
- return _.find(tableNames, function (tableName) {
- return tablesHaveJoinRelationship(tableName, otherTableName);
- });
- });
- return result ? true : false;
- };
-
- DatasourceUtil.haveATableReference = function haveATableReference() {
- var tableRef1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var tableRef2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
- var exactMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- if (exactMatch && tableRef1.length !== tableRef2.length || tableRef1.length === 0 && tableRef2.length === 0) {
- return false;
- }
- return _.find(tableRef1, function (ref1) {
- return tableRef2.indexOf(ref1) !== -1;
- }) ? true : false;
- };
-
-
-
- DatasourceUtil.mergeSynchronizePageContextFilter = function mergeSynchronizePageContextFilter(netFilterPageContext, synchronizedFilters) {
- if (!synchronizedFilters || synchronizedFilters.length === 0) {
- return netFilterPageContext;
- }
- var hasFilterByName = function hasFilterByName(filtersToCheck, filterName) {
- var exist = _.find(filtersToCheck, function (filter) {
- return filter.getItemName().toLowerCase() === filterName;
- });
- return exist ? true : false;
- };
-
- var thisVisFilters = {};
- var getFiltersByScope = function getFiltersByScope(scope) {
- var array = thisVisFilters[scope] = thisVisFilters[scope] || [];
- return array;
- };
- netFilterPageContext.forEach(function (entry) {
- var filters = getFiltersByScope(entry.getScope());
- filters.push(entry);
- });
-
- var localSynchFilters = synchronizedFilters.filter(function (entry) {
- return entry.scope !== 'global';
- });
- localSynchFilters.forEach(function (entry) {
- var nameToCheck = entry.filterName.toLowerCase();
- var thisTableFilters = getFiltersByScope(entry.scope);
- if (!hasFilterByName(thisTableFilters, nameToCheck)) {
- thisTableFilters.push(entry.getAPI());
- }
-
- thisVisFilters.global = _.filter(thisVisFilters.global, function (filter) {
- return filter.getItemName().toLowerCase() !== nameToCheck;
- });
- });
-
- var globalSynchFilters = synchronizedFilters.filter(function (entry) {
- return entry.scope === 'global';
- });
- globalSynchFilters.forEach(function (entry) {
- var nameToCheck = entry.filterName.toLowerCase();
- var toAdd = true;
-
- for (var property in thisVisFilters) {
- if (property !== 'global' && hasFilterByName(thisVisFilters[property], nameToCheck)) {
- toAdd = false;
- break;
- }
- }
- if (toAdd) {
- var globalFilters = getFiltersByScope('global');
- globalFilters.push(entry.getAPI());
- }
- });
-
- var result = void 0;
- for (var prop in thisVisFilters) {
- if (thisVisFilters[prop] && thisVisFilters[prop].length > 0) {
- if (!result) {
- result = thisVisFilters[prop];
- } else {
- result = result.concat(thisVisFilters[prop]);
- }
- }
- }
- return result || [];
- };
- DatasourceUtil.metadataColumnSupportsFiltering = function metadataColumnSupportsFiltering(column) {
- if (!column) {
- return false;
- }
-
-
-
- var getAggregationMode = (column.getAggregateMode || column.getAggregationMode).bind(column);
- return !(column.getType() === 'fact' && (getAggregationMode() === 'static' || column.getDefaultAggregation() === 'calculated'));
- };
- return DatasourceUtil;
- }(), _class.getPageContextItemTableRef = function (dataSource, pageContextEntry) {
- var tableRef = [];
- var itemIds = pageContextEntry.getItemIds ? pageContextEntry.getItemIds() : _.pluck(pageContextEntry.hierarchies, 'hierarchyUniqueName');
- itemIds.forEach(function (itemId) {
- var column = dataSource.getMetadataColumn(itemId);
- if (column) {
- var name = column.getTableName();
- if (tableRef.indexOf(name) === -1) {
- tableRef.push(name);
- }
- }
- });
- return tableRef;
- }, _class.isOrdinalAttribute = function (slot, dataItem) {
- var slotType = slot.getDefinition().getType();
- var dataType = dataItem.getMetadataColumn().getType();
- return slotType === 'ordinal' && dataType === 'attribute';
- }, _temp);
- return DatasourceUtil;
- });
|