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 { Method, Usage } from "./method";
|
||||||
import { setUpPack } from "./model-editor-queries";
|
import { setUpPack } from "./model-editor-queries";
|
||||||
import { MethodModelingPanel } from "./method-modeling/method-modeling-panel";
|
import { MethodModelingPanel } from "./method-modeling/method-modeling-panel";
|
||||||
|
import { ModelingStore } from "./modeling-store";
|
||||||
|
|
||||||
const SUPPORTED_LANGUAGES: string[] = ["java", "csharp"];
|
const SUPPORTED_LANGUAGES: string[] = ["java", "csharp"];
|
||||||
|
|
||||||
export class ModelEditorModule extends DisposableObject {
|
export class ModelEditorModule extends DisposableObject {
|
||||||
private readonly queryStorageDir: string;
|
private readonly queryStorageDir: string;
|
||||||
|
private readonly modelingStore: ModelingStore;
|
||||||
private readonly methodsUsagePanel: MethodsUsagePanel;
|
private readonly methodsUsagePanel: MethodsUsagePanel;
|
||||||
private readonly methodModelingPanel: MethodModelingPanel;
|
private readonly methodModelingPanel: MethodModelingPanel;
|
||||||
|
|
||||||
@@ -38,6 +40,7 @@ export class ModelEditorModule extends DisposableObject {
|
|||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
this.queryStorageDir = join(baseQueryStorageDir, "model-editor-results");
|
this.queryStorageDir = join(baseQueryStorageDir, "model-editor-results");
|
||||||
|
this.modelingStore = new ModelingStore(app);
|
||||||
this.methodsUsagePanel = this.push(new MethodsUsagePanel(cliServer));
|
this.methodsUsagePanel = this.push(new MethodsUsagePanel(cliServer));
|
||||||
this.methodModelingPanel = this.push(new MethodModelingPanel(app));
|
this.methodModelingPanel = this.push(new MethodModelingPanel(app));
|
||||||
}
|
}
|
||||||
@@ -153,6 +156,7 @@ export class ModelEditorModule extends DisposableObject {
|
|||||||
|
|
||||||
const view = new ModelEditorView(
|
const view = new ModelEditorView(
|
||||||
this.app,
|
this.app,
|
||||||
|
this.modelingStore,
|
||||||
this.databaseManager,
|
this.databaseManager,
|
||||||
this.cliServer,
|
this.cliServer,
|
||||||
this.queryRunner,
|
this.queryRunner,
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import { getLanguageDisplayName } from "../common/query-language";
|
|||||||
import { AutoModeler } from "./auto-modeler";
|
import { AutoModeler } from "./auto-modeler";
|
||||||
import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "./shared/hide-modeled-methods";
|
import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "./shared/hide-modeled-methods";
|
||||||
import { telemetryListener } from "../common/vscode/telemetry";
|
import { telemetryListener } from "../common/vscode/telemetry";
|
||||||
|
import { ModelingStore } from "./modeling-store";
|
||||||
|
|
||||||
export class ModelEditorView extends AbstractWebview<
|
export class ModelEditorView extends AbstractWebview<
|
||||||
ToModelEditorMessage,
|
ToModelEditorMessage,
|
||||||
@@ -55,6 +56,7 @@ export class ModelEditorView extends AbstractWebview<
|
|||||||
|
|
||||||
public constructor(
|
public constructor(
|
||||||
protected readonly app: App,
|
protected readonly app: App,
|
||||||
|
private readonly modelingStore: ModelingStore,
|
||||||
private readonly databaseManager: DatabaseManager,
|
private readonly databaseManager: DatabaseManager,
|
||||||
private readonly cliServer: CodeQLCliServer,
|
private readonly cliServer: CodeQLCliServer,
|
||||||
private readonly queryRunner: QueryRunner,
|
private readonly queryRunner: QueryRunner,
|
||||||
@@ -80,6 +82,8 @@ export class ModelEditorView extends AbstractWebview<
|
|||||||
) {
|
) {
|
||||||
super(app);
|
super(app);
|
||||||
|
|
||||||
|
this.modelingStore.initializeStateForDb(databaseItem);
|
||||||
|
|
||||||
this.autoModeler = new AutoModeler(
|
this.autoModeler = new AutoModeler(
|
||||||
app,
|
app,
|
||||||
cliServer,
|
cliServer,
|
||||||
@@ -527,6 +531,7 @@ export class ModelEditorView extends AbstractWebview<
|
|||||||
|
|
||||||
const view = new ModelEditorView(
|
const view = new ModelEditorView(
|
||||||
this.app,
|
this.app,
|
||||||
|
this.modelingStore,
|
||||||
this.databaseManager,
|
this.databaseManager,
|
||||||
this.cliServer,
|
this.cliServer,
|
||||||
this.queryRunner,
|
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 { mockEmptyDatabaseManager } from "../query-testing/test-runner-helpers";
|
||||||
import { QueryRunner } from "../../../../src/query-server";
|
import { QueryRunner } from "../../../../src/query-server";
|
||||||
import { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
|
import { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
|
||||||
|
import { ModelingStore } from "../../../../src/model-editor/modeling-store";
|
||||||
|
|
||||||
describe("ModelEditorView", () => {
|
describe("ModelEditorView", () => {
|
||||||
const app = createMockApp({});
|
const app = createMockApp({});
|
||||||
|
const modelingStore = mockedObject<ModelingStore>({});
|
||||||
const databaseManager = mockEmptyDatabaseManager();
|
const databaseManager = mockEmptyDatabaseManager();
|
||||||
const cliServer = mockedObject<CodeQLCliServer>({});
|
const cliServer = mockedObject<CodeQLCliServer>({});
|
||||||
const queryRunner = mockedObject<QueryRunner>({});
|
const queryRunner = mockedObject<QueryRunner>({});
|
||||||
@@ -40,6 +42,7 @@ describe("ModelEditorView", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
view = new ModelEditorView(
|
view = new ModelEditorView(
|
||||||
app,
|
app,
|
||||||
|
modelingStore,
|
||||||
databaseManager,
|
databaseManager,
|
||||||
cliServer,
|
cliServer,
|
||||||
queryRunner,
|
queryRunner,
|
||||||
|
|||||||
Reference in New Issue
Block a user