Introduce modeling store
This commit is contained in:
@@ -19,11 +19,13 @@ import { showResolvableLocation } from "../databases/local-databases/locations";
|
||||
import { Method, Usage } from "./method";
|
||||
import { setUpPack } from "./model-editor-queries";
|
||||
import { MethodModelingPanel } from "./method-modeling/method-modeling-panel";
|
||||
import { ModelingStore } from "./modeling-store";
|
||||
|
||||
const SUPPORTED_LANGUAGES: string[] = ["java", "csharp"];
|
||||
|
||||
export class ModelEditorModule extends DisposableObject {
|
||||
private readonly queryStorageDir: string;
|
||||
private readonly modelingStore: ModelingStore;
|
||||
private readonly methodsUsagePanel: MethodsUsagePanel;
|
||||
private readonly methodModelingPanel: MethodModelingPanel;
|
||||
|
||||
@@ -38,6 +40,7 @@ export class ModelEditorModule extends DisposableObject {
|
||||
) {
|
||||
super();
|
||||
this.queryStorageDir = join(baseQueryStorageDir, "model-editor-results");
|
||||
this.modelingStore = new ModelingStore(app);
|
||||
this.methodsUsagePanel = this.push(new MethodsUsagePanel(cliServer));
|
||||
this.methodModelingPanel = this.push(new MethodModelingPanel(app));
|
||||
}
|
||||
@@ -153,6 +156,7 @@ export class ModelEditorModule extends DisposableObject {
|
||||
|
||||
const view = new ModelEditorView(
|
||||
this.app,
|
||||
this.modelingStore,
|
||||
this.databaseManager,
|
||||
this.cliServer,
|
||||
this.queryRunner,
|
||||
|
||||
@@ -43,6 +43,7 @@ import { getLanguageDisplayName } from "../common/query-language";
|
||||
import { AutoModeler } from "./auto-modeler";
|
||||
import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "./shared/hide-modeled-methods";
|
||||
import { telemetryListener } from "../common/vscode/telemetry";
|
||||
import { ModelingStore } from "./modeling-store";
|
||||
|
||||
export class ModelEditorView extends AbstractWebview<
|
||||
ToModelEditorMessage,
|
||||
@@ -55,6 +56,7 @@ export class ModelEditorView extends AbstractWebview<
|
||||
|
||||
public constructor(
|
||||
protected readonly app: App,
|
||||
private readonly modelingStore: ModelingStore,
|
||||
private readonly databaseManager: DatabaseManager,
|
||||
private readonly cliServer: CodeQLCliServer,
|
||||
private readonly queryRunner: QueryRunner,
|
||||
@@ -80,6 +82,8 @@ export class ModelEditorView extends AbstractWebview<
|
||||
) {
|
||||
super(app);
|
||||
|
||||
this.modelingStore.initializeStateForDb(databaseItem);
|
||||
|
||||
this.autoModeler = new AutoModeler(
|
||||
app,
|
||||
cliServer,
|
||||
@@ -527,6 +531,7 @@ export class ModelEditorView extends AbstractWebview<
|
||||
|
||||
const view = new ModelEditorView(
|
||||
this.app,
|
||||
this.modelingStore,
|
||||
this.databaseManager,
|
||||
this.cliServer,
|
||||
this.queryRunner,
|
||||
|
||||
64
extensions/ql-vscode/src/model-editor/modeling-store.ts
Normal file
64
extensions/ql-vscode/src/model-editor/modeling-store.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
import { App } from "../common/app";
|
||||
import { DisposableObject } from "../common/disposable-object";
|
||||
import { AppEvent, AppEventEmitter } from "../common/events";
|
||||
import { DatabaseItem } from "../databases/local-databases";
|
||||
|
||||
interface DbModelingState {
|
||||
// Currently empty but will soon contain information about methods, etc.
|
||||
}
|
||||
|
||||
export class ModelingStore extends DisposableObject {
|
||||
public readonly onActiveDbChanged: AppEvent<void>;
|
||||
public readonly onDbClosed: AppEvent<string>;
|
||||
|
||||
private state: Map<string, DbModelingState>;
|
||||
private activeDb: string | undefined;
|
||||
|
||||
private readonly onActiveDbChangedEventEmitter: AppEventEmitter<void>;
|
||||
private readonly onDbClosedEventEmitter: AppEventEmitter<string>;
|
||||
|
||||
constructor(app: App) {
|
||||
super();
|
||||
|
||||
// State initialization
|
||||
this.activeDb = undefined;
|
||||
this.state = new Map<string, DbModelingState>();
|
||||
|
||||
// Event initialization
|
||||
this.onActiveDbChangedEventEmitter = this.push(
|
||||
app.createEventEmitter<void>(),
|
||||
);
|
||||
this.onActiveDbChanged = this.onActiveDbChangedEventEmitter.event;
|
||||
|
||||
this.onDbClosedEventEmitter = this.push(app.createEventEmitter<string>());
|
||||
this.onDbClosed = this.onDbClosedEventEmitter.event;
|
||||
}
|
||||
|
||||
public initializeStateForDb(databaseItem: DatabaseItem) {
|
||||
const dbUri = databaseItem.databaseUri.toString();
|
||||
this.state.set(dbUri, {
|
||||
databaseItem,
|
||||
});
|
||||
}
|
||||
|
||||
public setActiveDb(databaseItem: DatabaseItem) {
|
||||
this.activeDb = databaseItem.databaseUri.toString();
|
||||
this.onActiveDbChangedEventEmitter.fire();
|
||||
}
|
||||
|
||||
public removeDb(databaseItem: DatabaseItem) {
|
||||
const dbUri = databaseItem.databaseUri.toString();
|
||||
|
||||
if (!this.state.has(dbUri)) {
|
||||
throw Error("Cannot remove a database that has not been initialized");
|
||||
}
|
||||
|
||||
if (this.activeDb === dbUri) {
|
||||
this.activeDb = undefined;
|
||||
this.onActiveDbChangedEventEmitter.fire();
|
||||
}
|
||||
|
||||
this.state.delete(dbUri);
|
||||
this.onDbClosedEventEmitter.fire(dbUri);
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,11 @@ import { createMockApp } from "../../../__mocks__/appMock";
|
||||
import { mockEmptyDatabaseManager } from "../query-testing/test-runner-helpers";
|
||||
import { QueryRunner } from "../../../../src/query-server";
|
||||
import { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
|
||||
import { ModelingStore } from "../../../../src/model-editor/modeling-store";
|
||||
|
||||
describe("ModelEditorView", () => {
|
||||
const app = createMockApp({});
|
||||
const modelingStore = mockedObject<ModelingStore>({});
|
||||
const databaseManager = mockEmptyDatabaseManager();
|
||||
const cliServer = mockedObject<CodeQLCliServer>({});
|
||||
const queryRunner = mockedObject<QueryRunner>({});
|
||||
@@ -40,6 +42,7 @@ describe("ModelEditorView", () => {
|
||||
beforeEach(() => {
|
||||
view = new ModelEditorView(
|
||||
app,
|
||||
modelingStore,
|
||||
databaseManager,
|
||||
cliServer,
|
||||
queryRunner,
|
||||
|
||||
Reference in New Issue
Block a user