123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 'use strict';
- define(['../../lib/@waca/core-client/js/core-client/ui/core/Class'], function (Class) {
- 'use strict';
-
- var LegacyMapMappingManager = Class.extend({
- init: function init(visualization) {
- this.visualization = visualization;
- this.unmappedColumns = null;
- },
-
- _getColumnType: function _getColumnType(column) {
- var taxonomy = column.getTaxonomyList() ? column.getTaxonomyList()[0] : null;
- return taxonomy && taxonomy.getClass() === 'cGeoLocation' ? 'location' : column.getType();
- },
- _getSlotTypeForColumn: function _getSlotTypeForColumn(column) {
- var columnTypeToSlotTypeMap = {
- 'fact': 'ordinal',
- 'attribute': 'category',
- 'location': 'location'
- };
- return columnTypeToSlotTypeMap[this._getColumnType(column)];
- },
-
- _setExistingMappingInfo: function _setExistingMappingInfo(slotIdToColumnMap) {
- this.visualization.getSlots().getMappingInfoList().forEach(function (mapping) {
- slotIdToColumnMap[mapping.slot.getId()] = [mapping.dataItem.getColumnId()];
- });
- },
-
- mapColumnsToSlots: function mapColumnsToSlots(visDefinition, unmappedColumns, bKeepExistingMapping) {
- var slotIdToColumnMap = {};
- if (bKeepExistingMapping) {
- this._setExistingMappingInfo(slotIdToColumnMap);
- }
- var unmappedSlotDefs = visDefinition.getSlotList().filter(function (slotDef) {
- return !slotDef.getProperty('multiplier') && !slotIdToColumnMap[slotDef.getId()];
- });
- for (var i = 0; i < unmappedSlotDefs.length; i++) {
- var slotDef = unmappedSlotDefs[i];
- var slotId = slotDef.getId();
- if (!unmappedColumns.length) {
- break;
- }
- var column = this._findBestMatchingColumnForSlot(slotDef, unmappedColumns);
- slotIdToColumnMap[slotId] = [column.getId()];
- unmappedColumns = unmappedColumns.filter(function (unmappedColumn) {
- return unmappedColumn.getId() !== column.getId();
- });
- }
- this.unmappedColumns = unmappedColumns;
-
- return slotIdToColumnMap;
- },
- getUnmappedColumns: function getUnmappedColumns() {
- if (this.unmappedColumns.length) {
- return this.unmappedColumns;
- }
- },
- _findBestMatchingColumnForSlot: function _findBestMatchingColumnForSlot(slotDef, unmappedColumns) {
- var _this = this;
- var found;
- if (unmappedColumns.length === 0) {
- return;
- }
-
- if (slotDef.getSubType() === 'location') {
- found = unmappedColumns.find(function (column) {
- return _this._getColumnType(column) === 'location';
- });
- if (found) {
- return found;
- }
- }
-
- var type = slotDef.getType();
- found = unmappedColumns.find(function (column) {
- return this._getSlotTypeForColumn(column) === type;
- }.bind(this));
- if (found) {
- return found;
- }
-
- return unmappedColumns[0];
- }
- });
- return LegacyMapMappingManager;
- });
|