'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 Watson Analytics (C) Copyright IBM Corp. 2018, 2019 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ define(['underscore', '../../utils/DatasourceUtil', './SynchContextHelper', './SynchronizeDataHelper'], function (_, DatasourceUtil, SynchContextHelper, SynchronizeDataHelper) { /** * Class handling joined table column data within same data source */ var SynchJoinColumn = function () { function SynchJoinColumn(column, module, handlers) { _classCallCheck(this, SynchJoinColumn); this.module = module; this.column = column; this.handlers = handlers; this.joinedTableValues = {}; } SynchJoinColumn.prototype.getItemId = function getItemId() { return this.column.getId(); }; SynchJoinColumn.prototype.getLabel = function getLabel() { return this.column.getLabel(); }; SynchJoinColumn.prototype.getTableRef = function getTableRef() { this.column.getTableName(); }; SynchJoinColumn.prototype.matchedColumnByName = function matchedColumnByName(itemIdToMatch) { var columnToVerify = this.module.getMetadataColumn(itemIdToMatch); return columnToVerify ? this.column.getLabel().toLowerCase() === columnToVerify.getLabel().toLowerCase() : false; }; SynchJoinColumn.prototype.getJointTupleValue = function getJointTupleValue(itemIdToMatch, valueToMatch) { var matchedItemId = this.joinedTableValues[itemIdToMatch]; if (matchedItemId) { return matchedItemId[valueToMatch.u]; } }; SynchJoinColumn.prototype.matchJointedTableValue = function matchJointedTableValue(column, valueToMatch) { var sourceColumn = this.module.getMetadataColumn(column.getItemId()); //Column does not exist in this module so return null if (!sourceColumn) { return Promise.resolve(null); } var sourceTableRef = sourceColumn.getTableName(); var currentTableRef = this.column.getTableName(); //Does not point to the same table and these tables are joined if (currentTableRef !== sourceTableRef && DatasourceUtil.haveTableJoinsInSameDataSource(this.module, [currentTableRef], [sourceTableRef])) { var result = void 0; var sourceColumnIsOlap = sourceColumn.isOlapColumn(); var numeric = !this.column.isOlapColumn() && this.column.isNumericDataType(); var joinedTableEntry = this.getJointedTableEntry(sourceColumn.getId()); var dateTime = !this.column.isOlapColumn() && this.column.isDateTimeDataType(); if (!sourceColumnIsOlap && (numeric || dateTime)) { if (numeric) { result = joinedTableEntry[valueToMatch.u] = valueToMatch; } else { var clonedValue = SynchronizeDataHelper.clone(valueToMatch); if (SynchContextHelper.replaceUseValue(this.column, clonedValue)) { result = joinedTableEntry[valueToMatch.u] = clonedValue; } } return Promise.resolve(result); } else { return this.handlers.loadValues(this.module, this.column.getId()).then(function (values) { values = values || []; result = _.find(values, function (value) { return valueToMatch.d === value.d; }); if (result) { joinedTableEntry[valueToMatch.u] = result; } return result; }); } } return Promise.resolve(null); }; SynchJoinColumn.prototype.getJointedTableEntry = function getJointedTableEntry(itemId) { this.joinedTableValues[itemId] = this.joinedTableValues[itemId] || {}; return this.joinedTableValues[itemId]; }; return SynchJoinColumn; }(); /** * Class responsible for synchronize joined table data within same data source */ var SynchJoinTable = function () { function SynchJoinTable(module) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, SynchJoinTable); if (!module) { throw new Error('module object is not provided.'); } if (!options.handlers) { throw new Error('handlers object is not provided.'); } this.module = module; this.handlers = options.handlers; this.columns = {}; } SynchJoinTable.prototype.getColumn = function getColumn(itemId) { if (this.columns[itemId]) { return this.columns[itemId]; } var metadataColumn = this.module.getMetadataColumn(itemId); if (metadataColumn) { this.columns[itemId] = new SynchJoinColumn(metadataColumn, this.module, this.handlers); } return this.columns[itemId]; }; SynchJoinTable.prototype.getColumns = function getColumns() { return this.columns; }; return SynchJoinTable; }(); return SynchJoinTable; }); //# sourceMappingURL=SynchJoinTable.js.map