/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ 'use strict'; import * as azdata from 'azdata'; import { DacFxDataModel } from './models'; export abstract class BasePage { protected readonly wizardPage: azdata.window.modelviewdialog.WizardPage; protected readonly model: DacFxDataModel; protected readonly view: azdata.ModelView; /** * This method constructs all the elements of the page. * @returns {Promise} */ public async abstract start(): Promise; /** * This method is called when the user is entering the page. * @returns {Promise} */ public async abstract onPageEnter(): Promise; /** * This method is called when the user is leaving the page. * @returns {Promise} */ async onPageLeave(): Promise { return true; } /** * Override this method to cleanup what you don't need cached in the page. * @returns {Promise} */ public async cleanup(): Promise { return true; } /** * Sets up a navigation validator. * This will be called right before onPageEnter(). */ public abstract setupNavigationValidator(); protected async getServerValues(): Promise<{ connection, displayName, name }[]> { let cons = await azdata.connection.getActiveConnections(); // This user has no active connections ABORT MISSION if (!cons || cons.length === 0) { return undefined; } let count = -1; let idx = -1; let values = cons.map(c => { // Handle the code to remember what the user's choice was from before count++; if (idx === -1) { if (this.model.server && c.connectionId === this.model.server.connectionId) { idx = count; } else if (this.model.serverId && c.connectionId === this.model.serverId) { idx = count; } } let db = c.options.databaseDisplayName; let usr = c.options.user; let srv = c.options.server; if (!db) { db = ''; } if (!usr) { usr = 'default'; } let finalName = `${srv}, ${db} (${usr})`; return { connection: c, displayName: finalName, name: c.connectionId }; }); if (idx >= 0) { let tmp = values[0]; values[0] = values[idx]; values[idx] = tmp; } else { this.deleteServerValues(); } return values; } protected async getDatabaseValues(): Promise<{ displayName, name }[]> { let idx = -1; let count = -1; let values = (await azdata.connection.listDatabases(this.model.server.connectionId)).map(db => { count++; if (this.model.database && db === this.model.database) { idx = count; } return { displayName: db, name: db }; }); if (idx >= 0) { let tmp = values[0]; values[0] = values[idx]; values[idx] = tmp; } else { this.deleteDatabaseValues(); } return values; } protected deleteServerValues() { delete this.model.server; delete this.model.serverId; delete this.model.database; } protected deleteDatabaseValues() { return; } }