/** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal */ import { StateTransformer, StateTransform, StateObjectSelector, StateObjectCell } from '../../../mol-state'; import { PluginContext } from '../../context'; import { Download, ReadFile } from '../transforms/data'; import { getFileInfo } from '../../../mol-util/file-info'; import { DataFormatProvider } from './data/provider'; import { BuiltInDataFormats } from './data/formats'; import { objectForEach } from '../../../mol-util/object'; export class DataManager { readonly formats: DataFormatProvider[] = []; addFormat(p: DataFormatProvider) { this.formats.push(p); } get dataState() { return this.plugin.state.dataState; } async download(params: StateTransformer.Params, options?: Partial) { const data = this.dataState.build().toRoot().apply(Download, params, options); await this.plugin.runTask(this.dataState.updateTree(data)); return { data: data.selector }; } async readFile(params: StateTransformer.Params, options?: Partial) { const data = this.dataState.build().toRoot().apply(ReadFile, params, options); const fileInfo = getFileInfo(params.file); await this.plugin.runTask(this.dataState.updateTree(data)); return { data: data.selector, fileInfo }; } async parse(provider: K, data: StateObjectSelector> | StateObjectCell | string, params?: DataFormatProvider.Params

): Promise> async parse

(provider: P, data: StateObjectSelector> | StateObjectCell | string, params?: DataFormatProvider.Params

): Promise> async parse

(providerOrBuildIn: P | string, data: StateObjectSelector> | StateObjectCell | StateTransform.Ref, params?: DataFormatProvider.Params

) { const provider: P = typeof providerOrBuildIn === 'string' ? BuiltInDataFormats[providerOrBuildIn as keyof BuiltInDataFormats] as unknown as P : providerOrBuildIn as P; const cell = StateObjectCell.resolve(this.dataState, data); if (!cell) { throw new Error('Could not resolve data cell.'); } return provider.apply({ state: this.dataState, plugin: this.plugin }, cell, params); } // async test() { // const { data } = await this.download({ url: '' }); // const cif = await this.parse('mmcif', data); // } constructor(public plugin: PluginContext) { objectForEach(BuiltInDataFormats, f => this.formats.push(f)); } }