SynchJoinTable.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 Watson Analytics (C) Copyright IBM Corp. 2018, 2019
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. define(['underscore', '../../utils/DatasourceUtil', './SynchContextHelper', './SynchronizeDataHelper'], function (_, DatasourceUtil, SynchContextHelper, SynchronizeDataHelper) {
  9. /**
  10. * Class handling joined table column data within same data source
  11. */
  12. var SynchJoinColumn = function () {
  13. function SynchJoinColumn(column, module, handlers) {
  14. _classCallCheck(this, SynchJoinColumn);
  15. this.module = module;
  16. this.column = column;
  17. this.handlers = handlers;
  18. this.joinedTableValues = {};
  19. }
  20. SynchJoinColumn.prototype.getItemId = function getItemId() {
  21. return this.column.getId();
  22. };
  23. SynchJoinColumn.prototype.getLabel = function getLabel() {
  24. return this.column.getLabel();
  25. };
  26. SynchJoinColumn.prototype.getTableRef = function getTableRef() {
  27. this.column.getTableName();
  28. };
  29. SynchJoinColumn.prototype.matchedColumnByName = function matchedColumnByName(itemIdToMatch) {
  30. var columnToVerify = this.module.getMetadataColumn(itemIdToMatch);
  31. return columnToVerify ? this.column.getLabel().toLowerCase() === columnToVerify.getLabel().toLowerCase() : false;
  32. };
  33. SynchJoinColumn.prototype.getJointTupleValue = function getJointTupleValue(itemIdToMatch, valueToMatch) {
  34. var matchedItemId = this.joinedTableValues[itemIdToMatch];
  35. if (matchedItemId) {
  36. return matchedItemId[valueToMatch.u];
  37. }
  38. };
  39. SynchJoinColumn.prototype.matchJointedTableValue = function matchJointedTableValue(column, valueToMatch) {
  40. var sourceColumn = this.module.getMetadataColumn(column.getItemId());
  41. //Column does not exist in this module so return null
  42. if (!sourceColumn) {
  43. return Promise.resolve(null);
  44. }
  45. var sourceTableRef = sourceColumn.getTableName();
  46. var currentTableRef = this.column.getTableName();
  47. //Does not point to the same table and these tables are joined
  48. if (currentTableRef !== sourceTableRef && DatasourceUtil.haveTableJoinsInSameDataSource(this.module, [currentTableRef], [sourceTableRef])) {
  49. var result = void 0;
  50. var sourceColumnIsOlap = sourceColumn.isOlapColumn();
  51. var numeric = !this.column.isOlapColumn() && this.column.isNumericDataType();
  52. var joinedTableEntry = this.getJointedTableEntry(sourceColumn.getId());
  53. var dateTime = !this.column.isOlapColumn() && this.column.isDateTimeDataType();
  54. if (!sourceColumnIsOlap && (numeric || dateTime)) {
  55. if (numeric) {
  56. result = joinedTableEntry[valueToMatch.u] = valueToMatch;
  57. } else {
  58. var clonedValue = SynchronizeDataHelper.clone(valueToMatch);
  59. if (SynchContextHelper.replaceUseValue(this.column, clonedValue)) {
  60. result = joinedTableEntry[valueToMatch.u] = clonedValue;
  61. }
  62. }
  63. return Promise.resolve(result);
  64. } else {
  65. return this.handlers.loadValues(this.module, this.column.getId()).then(function (values) {
  66. values = values || [];
  67. result = _.find(values, function (value) {
  68. return valueToMatch.d === value.d;
  69. });
  70. if (result) {
  71. joinedTableEntry[valueToMatch.u] = result;
  72. }
  73. return result;
  74. });
  75. }
  76. }
  77. return Promise.resolve(null);
  78. };
  79. SynchJoinColumn.prototype.getJointedTableEntry = function getJointedTableEntry(itemId) {
  80. this.joinedTableValues[itemId] = this.joinedTableValues[itemId] || {};
  81. return this.joinedTableValues[itemId];
  82. };
  83. return SynchJoinColumn;
  84. }();
  85. /**
  86. * Class responsible for synchronize joined table data within same data source
  87. */
  88. var SynchJoinTable = function () {
  89. function SynchJoinTable(module) {
  90. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  91. _classCallCheck(this, SynchJoinTable);
  92. if (!module) {
  93. throw new Error('module object is not provided.');
  94. }
  95. if (!options.handlers) {
  96. throw new Error('handlers object is not provided.');
  97. }
  98. this.module = module;
  99. this.handlers = options.handlers;
  100. this.columns = {};
  101. }
  102. SynchJoinTable.prototype.getColumn = function getColumn(itemId) {
  103. if (this.columns[itemId]) {
  104. return this.columns[itemId];
  105. }
  106. var metadataColumn = this.module.getMetadataColumn(itemId);
  107. if (metadataColumn) {
  108. this.columns[itemId] = new SynchJoinColumn(metadataColumn, this.module, this.handlers);
  109. }
  110. return this.columns[itemId];
  111. };
  112. SynchJoinTable.prototype.getColumns = function getColumns() {
  113. return this.columns;
  114. };
  115. return SynchJoinTable;
  116. }();
  117. return SynchJoinTable;
  118. });
  119. //# sourceMappingURL=SynchJoinTable.js.map