/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; import * as azdata from 'azdata'; import { WizardController } from './wizard/wizardController'; import { promises as fs } from 'fs'; import * as loc from './constants/strings'; import { MigrationNotebookInfo, NotebookPathHelper } from './constants/notebookPathHelper'; import { IconPathHelper } from './constants/iconPathHelper'; import { DashboardWidget } from './dashboard/sqlServerDashboard'; import { MigrationLocalStorage } from './models/migrationLocalStorage'; class SQLMigration { constructor(private readonly context: vscode.ExtensionContext) { NotebookPathHelper.setExtensionContext(context); IconPathHelper.setExtensionContext(context); MigrationLocalStorage.setExtensionContext(context); } async start(): Promise { await this.registerCommands(); } async registerCommands(): Promise { const commandDisposables: vscode.Disposable[] = [ // Array of disposables returned by registerCommand vscode.commands.registerCommand('sqlmigration.start', async () => { await this.launchMigrationWizard(); }), vscode.commands.registerCommand('sqlmigration.openNotebooks', async () => { const input = vscode.window.createQuickPick(); input.placeholder = loc.NOTEBOOK_QUICK_PICK_PLACEHOLDER; input.items = NotebookPathHelper.getAllMigrationNotebooks(); this.context.subscriptions.push(input.onDidAccept(async (e) => { const selectedNotebook = input.selectedItems[0]; if (selectedNotebook) { try { azdata.nb.showNotebookDocument(vscode.Uri.parse(`untitled: ${selectedNotebook.label}`), { preview: false, initialContent: (await fs.readFile(selectedNotebook.notebookPath)).toString(), initialDirtyState: false }); } catch (e) { vscode.window.showErrorMessage(`${loc.NOTEBOOK_OPEN_ERROR} - ${e.toString()}`); } input.hide(); } })); input.show(); }), azdata.tasks.registerTask('sqlmigration.start', async () => { await this.launchMigrationWizard(); }), azdata.tasks.registerTask('sqlmigration.sendfeedback', async () => { const actionId = 'workbench.action.openIssueReporter'; const args = { extensionId: 'microsoft.sql-migration', issueTitle: loc.FEEDBACK_ISSUE_TITLE, }; return await vscode.commands.executeCommand(actionId, args); }), ]; this.context.subscriptions.push(...commandDisposables); } async launchMigrationWizard(): Promise { let activeConnection = await azdata.connection.getCurrentConnection(); let connectionId: string = ''; if (!activeConnection) { const connection = await azdata.connection.openConnectionDialog(); if (connection) { connectionId = connection.connectionId; } } else { connectionId = activeConnection.connectionId; } const wizardController = new WizardController(this.context); await wizardController.openWizard(connectionId); } stop(): void { } } let sqlMigration: SQLMigration; export async function activate(context: vscode.ExtensionContext) { sqlMigration = new SQLMigration(context); await sqlMigration.registerCommands(); let widget = new DashboardWidget(); widget.register(); } export function deactivate(): void { sqlMigration.stop(); }