mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-17 01:25:36 -05:00
92 lines
3.3 KiB
TypeScript
92 lines
3.3 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as azdata from 'azdata';
|
|
import { MigrationWizardPage } from '../models/migrationWizardPage';
|
|
import { SOURCE_CONFIGURATION_PAGE_TITLE, COLLECTING_SOURCE_CONFIGURATIONS, COLLECTING_SOURCE_CONFIGURATIONS_INFO, COLLECTING_SOURCE_CONFIGURATIONS_ERROR } from '../constants/strings';
|
|
import { MigrationStateModel, StateChangeEvent, State } from '../models/stateMachine';
|
|
import { Disposable } from 'vscode';
|
|
|
|
export class SourceConfigurationPage extends MigrationWizardPage {
|
|
// For future reference: DO NOT EXPOSE WIZARD DIRECTLY THROUGH HERE.
|
|
constructor(wizard: azdata.window.Wizard, migrationStateModel: MigrationStateModel) {
|
|
super(wizard, azdata.window.createWizardPage(SOURCE_CONFIGURATION_PAGE_TITLE), migrationStateModel);
|
|
}
|
|
|
|
protected async registerContent(view: azdata.ModelView) {
|
|
await this.initialState(view);
|
|
}
|
|
|
|
private gatheringInfoComponent!: azdata.FormComponent;
|
|
private async initialState(view: azdata.ModelView) {
|
|
this.gatheringInfoComponent = this.createGatheringInfoComponent(view);
|
|
const form = view.modelBuilder.formContainer().withFormItems(
|
|
[
|
|
this.gatheringInfoComponent
|
|
],
|
|
{
|
|
titleFontSize: '20px'
|
|
}
|
|
).component();
|
|
|
|
await view.initializeModel(form);
|
|
|
|
let connectionUri: string = await azdata.connection.getUriForConnection(this.migrationStateModel.sourceConnectionId);
|
|
this.migrationStateModel.migrationService.getAssessments(connectionUri).then(results => {
|
|
if (results) {
|
|
this.migrationStateModel.assessmentResults = results.items;
|
|
this.migrationStateModel.currentState = State.TARGET_SELECTION;
|
|
}
|
|
});
|
|
}
|
|
|
|
private async enterErrorState() {
|
|
const component = this.gatheringInfoComponent.component as azdata.TextComponent;
|
|
component.value = COLLECTING_SOURCE_CONFIGURATIONS_ERROR(this.migrationStateModel.gatheringInformationError);
|
|
}
|
|
|
|
private async enterTargetSelectionState() {
|
|
this.goToNextPage();
|
|
}
|
|
|
|
//#region component builders
|
|
private createGatheringInfoComponent(view: azdata.ModelView): azdata.FormComponent {
|
|
let explaination = view.modelBuilder.text().withProperties<azdata.TextComponentProperties>({
|
|
value: COLLECTING_SOURCE_CONFIGURATIONS_INFO,
|
|
CSSStyles: {
|
|
'font-size': '14px'
|
|
}
|
|
});
|
|
|
|
return {
|
|
component: explaination.component(),
|
|
title: COLLECTING_SOURCE_CONFIGURATIONS
|
|
};
|
|
}
|
|
//#endregion
|
|
|
|
private eventListener: Disposable | undefined;
|
|
public async onPageEnter(): Promise<void> {
|
|
this.eventListener = this.migrationStateModel.stateChangeEvent(async (e) => this.onStateChangeEvent(e));
|
|
}
|
|
|
|
public async onPageLeave(): Promise<void> {
|
|
this.eventListener?.dispose();
|
|
}
|
|
|
|
protected async handleStateChange(e: StateChangeEvent): Promise<void> {
|
|
switch (e.newState) {
|
|
case State.COLLECTION_SOURCE_INFO_ERROR:
|
|
return this.enterErrorState();
|
|
case State.TARGET_SELECTION:
|
|
return this.enterTargetSelectionState();
|
|
}
|
|
}
|
|
|
|
public async canLeave(): Promise<boolean> {
|
|
return this.migrationStateModel.currentState === State.TARGET_SELECTION;
|
|
}
|
|
}
|