123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- import { setAsPrimitive, map, isTypedArray, assert, each, retrieve2 } from 'zrender/lib/core/util.js';
- import { createSource, cloneSourceShallow } from '../Source.js';
- import { SOURCE_FORMAT_TYPED_ARRAY, SOURCE_FORMAT_ORIGINAL } from '../../util/types.js';
- import { querySeriesUpstreamDatasetModel, queryDatasetUpstreamDatasetModels } from './sourceHelper.js';
- import { applyDataTransform } from './transform.js';
- import DataStore from '../DataStore.js';
- import { DefaultDataProvider } from './dataProvider.js';
- var SourceManager = function () {
- function SourceManager(sourceHost) {
-
- this._sourceList = [];
- this._storeList = [];
-
- this._upstreamSignList = [];
- this._versionSignBase = 0;
- this._dirty = true;
- this._sourceHost = sourceHost;
- }
-
- SourceManager.prototype.dirty = function () {
- this._setLocalSource([], []);
- this._storeList = [];
- this._dirty = true;
- };
- SourceManager.prototype._setLocalSource = function (sourceList, upstreamSignList) {
- this._sourceList = sourceList;
- this._upstreamSignList = upstreamSignList;
- this._versionSignBase++;
- if (this._versionSignBase > 9e10) {
- this._versionSignBase = 0;
- }
- };
-
- SourceManager.prototype._getVersionSign = function () {
- return this._sourceHost.uid + '_' + this._versionSignBase;
- };
-
- SourceManager.prototype.prepareSource = function () {
-
-
- if (this._isDirty()) {
- this._createSource();
- this._dirty = false;
- }
- };
- SourceManager.prototype._createSource = function () {
- this._setLocalSource([], []);
- var sourceHost = this._sourceHost;
- var upSourceMgrList = this._getUpstreamSourceManagers();
- var hasUpstream = !!upSourceMgrList.length;
- var resultSourceList;
- var upstreamSignList;
- if (isSeries(sourceHost)) {
- var seriesModel = sourceHost;
- var data = void 0;
- var sourceFormat = void 0;
- var upSource = void 0;
-
- if (hasUpstream) {
- var upSourceMgr = upSourceMgrList[0];
- upSourceMgr.prepareSource();
- upSource = upSourceMgr.getSource();
- data = upSource.data;
- sourceFormat = upSource.sourceFormat;
- upstreamSignList = [upSourceMgr._getVersionSign()];
- }
-
- else {
- data = seriesModel.get('data', true);
- sourceFormat = isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;
- upstreamSignList = [];
- }
-
- var newMetaRawOption = this._getSourceMetaRawOption() || {};
- var upMetaRawOption = upSource && upSource.metaRawOption || {};
- var seriesLayoutBy = retrieve2(newMetaRawOption.seriesLayoutBy, upMetaRawOption.seriesLayoutBy) || null;
- var sourceHeader = retrieve2(newMetaRawOption.sourceHeader, upMetaRawOption.sourceHeader);
-
-
-
- var dimensions = retrieve2(newMetaRawOption.dimensions, upMetaRawOption.dimensions);
-
-
- var needsCreateSource = seriesLayoutBy !== upMetaRawOption.seriesLayoutBy || !!sourceHeader !== !!upMetaRawOption.sourceHeader || dimensions;
- resultSourceList = needsCreateSource ? [createSource(data, {
- seriesLayoutBy: seriesLayoutBy,
- sourceHeader: sourceHeader,
- dimensions: dimensions
- }, sourceFormat)] : [];
- } else {
- var datasetModel = sourceHost;
-
- if (hasUpstream) {
- var result = this._applyTransform(upSourceMgrList);
- resultSourceList = result.sourceList;
- upstreamSignList = result.upstreamSignList;
- }
-
- else {
- var sourceData = datasetModel.get('source', true);
- resultSourceList = [createSource(sourceData, this._getSourceMetaRawOption(), null)];
- upstreamSignList = [];
- }
- }
- if (process.env.NODE_ENV !== 'production') {
- assert(resultSourceList && upstreamSignList);
- }
- this._setLocalSource(resultSourceList, upstreamSignList);
- };
- SourceManager.prototype._applyTransform = function (upMgrList) {
- var datasetModel = this._sourceHost;
- var transformOption = datasetModel.get('transform', true);
- var fromTransformResult = datasetModel.get('fromTransformResult', true);
- if (process.env.NODE_ENV !== 'production') {
- assert(fromTransformResult != null || transformOption != null);
- }
- if (fromTransformResult != null) {
- var errMsg = '';
- if (upMgrList.length !== 1) {
- if (process.env.NODE_ENV !== 'production') {
- errMsg = 'When using `fromTransformResult`, there should be only one upstream dataset';
- }
- doThrow(errMsg);
- }
- }
- var sourceList;
- var upSourceList = [];
- var upstreamSignList = [];
- each(upMgrList, function (upMgr) {
- upMgr.prepareSource();
- var upSource = upMgr.getSource(fromTransformResult || 0);
- var errMsg = '';
- if (fromTransformResult != null && !upSource) {
- if (process.env.NODE_ENV !== 'production') {
- errMsg = 'Can not retrieve result by `fromTransformResult`: ' + fromTransformResult;
- }
- doThrow(errMsg);
- }
- upSourceList.push(upSource);
- upstreamSignList.push(upMgr._getVersionSign());
- });
- if (transformOption) {
- sourceList = applyDataTransform(transformOption, upSourceList, {
- datasetIndex: datasetModel.componentIndex
- });
- } else if (fromTransformResult != null) {
- sourceList = [cloneSourceShallow(upSourceList[0])];
- }
- return {
- sourceList: sourceList,
- upstreamSignList: upstreamSignList
- };
- };
- SourceManager.prototype._isDirty = function () {
- if (this._dirty) {
- return true;
- }
-
- var upSourceMgrList = this._getUpstreamSourceManagers();
- for (var i = 0; i < upSourceMgrList.length; i++) {
- var upSrcMgr = upSourceMgrList[i];
- if (
-
-
- upSrcMgr._isDirty() || this._upstreamSignList[i] !== upSrcMgr._getVersionSign()) {
- return true;
- }
- }
- };
-
- SourceManager.prototype.getSource = function (sourceIndex) {
- sourceIndex = sourceIndex || 0;
- var source = this._sourceList[sourceIndex];
- if (!source) {
-
- var upSourceMgrList = this._getUpstreamSourceManagers();
- return upSourceMgrList[0] && upSourceMgrList[0].getSource(sourceIndex);
- }
- return source;
- };
-
- SourceManager.prototype.getSharedDataStore = function (seriesDimRequest) {
- if (process.env.NODE_ENV !== 'production') {
- assert(isSeries(this._sourceHost), 'Can only call getDataStore on series source manager.');
- }
- var schema = seriesDimRequest.makeStoreSchema();
- return this._innerGetDataStore(schema.dimensions, seriesDimRequest.source, schema.hash);
- };
- SourceManager.prototype._innerGetDataStore = function (storeDims, seriesSource, sourceReadKey) {
-
- var sourceIndex = 0;
- var storeList = this._storeList;
- var cachedStoreMap = storeList[sourceIndex];
- if (!cachedStoreMap) {
- cachedStoreMap = storeList[sourceIndex] = {};
- }
- var cachedStore = cachedStoreMap[sourceReadKey];
- if (!cachedStore) {
- var upSourceMgr = this._getUpstreamSourceManagers()[0];
- if (isSeries(this._sourceHost) && upSourceMgr) {
- cachedStore = upSourceMgr._innerGetDataStore(storeDims, seriesSource, sourceReadKey);
- } else {
- cachedStore = new DataStore();
-
- cachedStore.initData(new DefaultDataProvider(seriesSource, storeDims.length), storeDims);
- }
- cachedStoreMap[sourceReadKey] = cachedStore;
- }
- return cachedStore;
- };
-
- SourceManager.prototype._getUpstreamSourceManagers = function () {
-
-
-
- var sourceHost = this._sourceHost;
- if (isSeries(sourceHost)) {
- var datasetModel = querySeriesUpstreamDatasetModel(sourceHost);
- return !datasetModel ? [] : [datasetModel.getSourceManager()];
- } else {
- return map(queryDatasetUpstreamDatasetModels(sourceHost), function (datasetModel) {
- return datasetModel.getSourceManager();
- });
- }
- };
- SourceManager.prototype._getSourceMetaRawOption = function () {
- var sourceHost = this._sourceHost;
- var seriesLayoutBy;
- var sourceHeader;
- var dimensions;
- if (isSeries(sourceHost)) {
- seriesLayoutBy = sourceHost.get('seriesLayoutBy', true);
- sourceHeader = sourceHost.get('sourceHeader', true);
- dimensions = sourceHost.get('dimensions', true);
- }
-
- else if (!this._getUpstreamSourceManagers().length) {
- var model = sourceHost;
- seriesLayoutBy = model.get('seriesLayoutBy', true);
- sourceHeader = model.get('sourceHeader', true);
- dimensions = model.get('dimensions', true);
- }
- return {
- seriesLayoutBy: seriesLayoutBy,
- sourceHeader: sourceHeader,
- dimensions: dimensions
- };
- };
- return SourceManager;
- }();
- export { SourceManager };
- export function disableTransformOptionMerge(datasetModel) {
- var transformOption = datasetModel.option.transform;
- transformOption && setAsPrimitive(datasetModel.option.transform);
- }
- function isSeries(sourceHost) {
-
- return sourceHost.mainType === 'series';
- }
- function doThrow(errMsg) {
- throw new Error(errMsg);
- }
|