Support right clicking the database to start the importer task (#2233)

This commit is contained in:
Amir Ali Omidi
2018-08-15 14:11:54 -07:00
committed by GitHub
parent 44e9a97f09
commit 2c8e93cc96
5 changed files with 33 additions and 13 deletions

View File

@@ -11,7 +11,7 @@ import * as vscode from 'vscode';
export default abstract class ControllerBase implements vscode.Disposable { export default abstract class ControllerBase implements vscode.Disposable {
protected _context: vscode.ExtensionContext; protected _context: vscode.ExtensionContext;
public constructor(context: vscode.ExtensionContext) { protected constructor(context: vscode.ExtensionContext) {
this._context = context; this._context = context;
} }

View File

@@ -19,6 +19,9 @@ import { FlatFileProvider } from '../services/contracts';
*/ */
export default class MainController extends ControllerBase { export default class MainController extends ControllerBase {
public constructor(context: vscode.ExtensionContext) {
super(context);
}
/** /**
*/ */
public deactivate(): void { public deactivate(): void {
@@ -36,6 +39,6 @@ export default class MainController extends ControllerBase {
} }
private initializeFlatFileProvider(provider: FlatFileProvider) { private initializeFlatFileProvider(provider: FlatFileProvider) {
sqlops.tasks.registerTask('flatFileImport.start', () => new FlatFileWizard(provider).start()); sqlops.tasks.registerTask('flatFileImport.start', (profile: sqlops.IConnectionProfile, ...args: any[]) => new FlatFileWizard(provider).start(profile, args));
} }
} }

View File

@@ -14,6 +14,7 @@ export interface ImportDataModel {
proseColumns: ColumnMetadata[]; proseColumns: ColumnMetadata[];
proseDataPreview: string[][]; proseDataPreview: string[][];
server: sqlops.connection.Connection; server: sqlops.connection.Connection;
serverId: string;
database: string; database: string;
table: string; table: string;
schema: string; schema: string;

View File

@@ -28,8 +28,15 @@ export class FlatFileWizard {
this.provider = provider; this.provider = provider;
} }
public async start() { public async start(p: any, ...args: any[]) {
let model = <ImportDataModel>{}; let model = <ImportDataModel>{};
let profile = <sqlops.IConnectionProfile>p.connectionProfile;
if (profile) {
model.serverId = profile.id;
model.database = profile.databaseName;
}
let pages: Map<number, ImportPage> = new Map<number, ImportPage>(); let pages: Map<number, ImportPage> = new Map<number, ImportPage>();
@@ -46,6 +53,7 @@ export class FlatFileWizard {
let page4 = sqlops.window.modelviewdialog.createWizardPage(localize('flatFileImport.page4Name', 'Summary')); let page4 = sqlops.window.modelviewdialog.createWizardPage(localize('flatFileImport.page4Name', 'Summary'));
let fileConfigPage: FileConfigPage; let fileConfigPage: FileConfigPage;
page1.registerContent(async (view) => { page1.registerContent(async (view) => {
fileConfigPage = new FileConfigPage(this, page1, model, view, this.provider); fileConfigPage = new FileConfigPage(this, page1, model, view, this.provider);
pages.set(0, fileConfigPage); pages.set(0, fileConfigPage);

View File

@@ -55,13 +55,14 @@ export class FileConfigPage extends ImportPage {
} }
async onPageEnter(): Promise<boolean> { async onPageEnter(): Promise<boolean> {
await this.populateServerDropdown(); let r1 = await this.populateServerDropdown();
await this.populateDatabaseDropdown(); let r2 = await this.populateDatabaseDropdown();
await this.populateSchemaDropdown(); let r3 = await this.populateSchemaDropdown();
return true; return r1 && r2 && r3;
} }
async onPageLeave(): Promise<boolean> { async onPageLeave(): Promise<boolean> {
delete this.model.serverId;
return true; return true;
} }
@@ -109,11 +110,16 @@ export class FileConfigPage extends ImportPage {
let count = -1; let count = -1;
let idx = -1; let idx = -1;
let values = cons.map(c => { let values = cons.map(c => {
// Handle the code to remember what the user's choice was from before // Handle the code to remember what the user's choice was from before
count++; count++;
if (this.model.server && c.connectionId === this.model.server.connectionId) { if (idx === -1) {
idx = count; 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 db = c.options.databaseDisplayName;
@@ -136,12 +142,13 @@ export class FileConfigPage extends ImportPage {
}; };
}); });
if (idx > 0) { if (idx >= 0) {
let tmp = values[0]; let tmp = values[0];
values[0] = values[idx]; values[0] = values[idx];
values[idx] = tmp; values[idx] = tmp;
} else { } else {
delete this.model.server; delete this.model.server;
delete this.model.serverId;
delete this.model.database; delete this.model.database;
delete this.model.schema; delete this.model.schema;
} }
@@ -192,13 +199,14 @@ export class FileConfigPage extends ImportPage {
if (this.model.database && db === this.model.database) { if (this.model.database && db === this.model.database) {
idx = count; idx = count;
} }
return { return {
displayName: db, displayName: db,
name: db name: db
}; };
}); });
if (idx > 0) { if (idx >= 0) {
let tmp = values[0]; let tmp = values[0];
values[0] = values[idx]; values[0] = values[idx];
values[idx] = tmp; values[idx] = tmp;
@@ -316,7 +324,7 @@ export class FileConfigPage extends ImportPage {
} }
private async populateSchemaDropdown(): Promise<Boolean> { private async populateSchemaDropdown(): Promise<boolean> {
this.schemaLoader.loading = true; this.schemaLoader.loading = true;
let connectionUri = await sqlops.connection.getUriForConnection(this.model.server.connectionId); let connectionUri = await sqlops.connection.getUriForConnection(this.model.server.connectionId);
let queryProvider = sqlops.dataprotocol.getProvider<sqlops.QueryProvider>(this.model.server.providerName, sqlops.DataProviderType.QueryProvider); let queryProvider = sqlops.dataprotocol.getProvider<sqlops.QueryProvider>(this.model.server.providerName, sqlops.DataProviderType.QueryProvider);
@@ -342,7 +350,7 @@ export class FileConfigPage extends ImportPage {
}; };
}); });
if (idx > 0) { if (idx >= 0) {
let tmp = values[0]; let tmp = values[0];
values[0] = values[idx]; values[0] = values[idx];
values[idx] = tmp; values[idx] = tmp;