Source: dataSources/dataSource.js

let GeoJsonDataSource = require('./geoJsonVectorSource');
let EsriJsonDataSource = require('./esriJsonVectorSource');
let FileEsriJsonDataSource = require('./fileEsriJsonVectorSource');
let EmptyVectorSource = require('./emptyVectorSource');
let GeoImageSource = require('./geoImageSource');

const dict = {
  geoJsonVectorSource: GeoJsonDataSource,
  esriJsonVectorSource: EsriJsonDataSource,
  fileEsriJsonVectorSource: FileEsriJsonDataSource,
  emptyVectorSource: EmptyVectorSource,
  geoImage: GeoImageSource
};

/**
 * Класс DataSource - фабрика, предназначенная для создания источника данных конкретного типа
 */
class DataSourceFabric {
  constructor(params) {
    let type = params.dataSourceType || "geoJsonVectorSource";
    let sourceClass = dict[type];
    let sourceObject = new sourceClass(params);
    this.source = sourceObject.getSource();
    this.sourceObject = sourceObject;
    this.type = type;
  }

  /**
   * Возвращает текущий источник данных
   * @return {ol.source.Source}
   */
  getSource() {
    return this.source;
  }

  getDescriptor() {
    return this;
  }

  /**
   * Применяет новый источник данных
   * @param {ol.source.Source) source
     */
  setSource(source) {
    this.source = source;
  }

  /**
   * Выполнить транзакцию
   * @param params
   */
  transact(params) {
    this.sourceObject.transact(params);
  }
}

module.exports = DataSourceFabric;