123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- '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
|