@finos/legend-extension-dsl-data-space
Version:
Legend extension for Data Space DSL
88 lines (82 loc) • 3.49 kB
text/typescript
/**
* Copyright (c) 2020-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { makeObservable, observable } from 'mobx';
import { type DataSpaceViewerState } from './DataSpaceViewerState.js';
import { DataAccessState } from '@finos/legend-query-builder';
import {
DataSpaceServiceExecutableInfo,
type DataSpaceExecutableAnalysisResult,
DataSpaceMultiExecutionServiceExecutableInfo,
} from '../graph-manager/action/analytics/DataSpaceAnalysis.js';
import type { DatasetSpecification } from '@finos/legend-graph';
export class DataSpaceQuickStartState {
readonly dataSpaceViewerState: DataSpaceViewerState;
dataAccessStateIndex = new Map<
DataSpaceExecutableAnalysisResult,
DataAccessState
>();
constructor(dataSpaceViewerState: DataSpaceViewerState) {
makeObservable(this, {
dataAccessStateIndex: observable,
});
this.dataSpaceViewerState = dataSpaceViewerState;
dataSpaceViewerState.dataSpaceAnalysisResult.executables.forEach(
(executable) => {
let dataAccessState: DataAccessState | undefined;
let mapping: string | undefined;
let runtime: string | undefined;
let datasets: DatasetSpecification[] | undefined;
if (executable.info instanceof DataSpaceServiceExecutableInfo) {
mapping = executable.info.mapping;
runtime = executable.info.runtime;
datasets = executable.info.datasets;
} else if (
executable.info instanceof
DataSpaceMultiExecutionServiceExecutableInfo
) {
mapping = executable.info.keyedExecutableInfos.at(0)?.mapping;
runtime = executable.info.keyedExecutableInfos.at(0)?.runtime;
datasets = executable.info.keyedExecutableInfos.at(0)?.datasets;
}
if (mapping && runtime) {
dataAccessState = new DataAccessState(
this.dataSpaceViewerState.applicationStore,
this.dataSpaceViewerState.graphManagerState,
{
initialDatasets: datasets,
mapping,
runtime,
graphData: this.dataSpaceViewerState.retrieveGraphData(),
// TODO: we need to find a way to unify this code logic with the check in query builder
// and avoid the need to send over (dummy) parameter values in order to make the survey datasets
// call
// We need to also cache the datasets survey result with query as scope in addition to the work done in
// https://github.com/finos/legend-engine/pull/1678
getQuery: async () => undefined,
// getQuery: () =>
// this.dataSpaceViewerState.graphManagerState.graphManager.pureCodeToLambda(
// query,
// ),
},
);
}
if (dataAccessState) {
this.dataAccessStateIndex.set(executable, dataAccessState);
}
},
);
}
}