@finos/legend-graph
Version:
Legend graph and graph manager
87 lines • 4.28 kB
JavaScript
/**
* 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 { PureModel, CoreModel, SystemModel, GenerationModel, } from '../graph/PureModel.js';
import { DependencyManager } from '../graph/DependencyManager.js';
import { ActionState, } from '@finos/legend-shared';
import { InstanceSetImplementation } from '../graph/metamodel/pure/packageableElements/mapping/InstanceSetImplementation.js';
import { EmbeddedFlatDataPropertyMapping } from '../graph/metamodel/pure/packageableElements/store/flatData/mapping/EmbeddedFlatDataPropertyMapping.js';
import { EmbeddedRelationalInstanceSetImplementation } from '../graph/metamodel/pure/packageableElements/store/relational/mapping/EmbeddedRelationalInstanceSetImplementation.js';
export class AbstractPureGraphManagerExtension {
graphManager;
constructor(graphManager) {
this.graphManager = graphManager;
}
}
export class AbstractPureGraphManager {
extensions = [];
pluginManager;
logService;
constructor(pluginManager, logService) {
this.pluginManager = pluginManager;
this.logService = logService;
this.extensions = pluginManager
.getPureGraphManagerPlugins()
.flatMap((plugin) => plugin.getExtraPureGraphManagerExtensionBuilders?.() ?? [])
.map((builder) => builder(this))
.filter((extension) => extension.getSupportedProtocolVersion() ===
this.getSupportedProtocolVersion());
}
async createBasicGraph(options) {
const extensionElementClasses = this.pluginManager.getPureGraphPlugins();
const coreModel = new CoreModel(extensionElementClasses);
const systemModel = new SystemModel(extensionElementClasses);
if (options?.initializeSystem) {
await this.buildSystem(coreModel, systemModel, ActionState.create());
systemModel.initializeAutoImports();
}
const graph = new PureModel(coreModel, systemModel, this.pluginManager.getPureGraphPlugins());
return graph;
}
createDependencyManager() {
return new DependencyManager(this.pluginManager.getPureGraphPlugins());
}
createGenerationModel() {
return new GenerationModel(this.pluginManager.getPureGraphPlugins());
}
/**
* Check if a mapping element is an instance set implementation
*
* NOTE: This would account for embedded property mappings as well
* these are technically instance of `InstanceSetImplementation`
* but since unlike Pure, Typescript cannot do multiple inheritance
* we only can make embedded property mapping extends `PropertyMapping`
*
* Potentially, we might need to apply an extension mechanism on this
*/
isInstanceSetImplementation(setImplementation) {
return (setImplementation instanceof InstanceSetImplementation ||
setImplementation instanceof EmbeddedFlatDataPropertyMapping ||
setImplementation instanceof EmbeddedRelationalInstanceSetImplementation);
}
/**
* Filter the list of system elements that will be shown in selection options
* to users. This is helpful to avoid overwhelming and confusing users in form
* mode since many system elements are needed to build the graph, but should
* not present at all as selection options in form mode.
*/
collectExposedSystemElements(systemElements) {
const allowedSystemElements = this.pluginManager
.getPureGraphManagerPlugins()
.flatMap((plugin) => plugin.getExtraExposedSystemElementPath?.() ?? []);
return systemElements.filter((element) => allowedSystemElements.includes(element.path));
}
}
//# sourceMappingURL=AbstractPureGraphManager.js.map