Make SDK-style project a checkbox option instead of separate template (#18698)

* switch to using a checkbox instead of separate template for new SDK style project

* let project provider provide sdk learn more url

* Reorder
This commit is contained in:
Kim Santiago
2022-03-11 16:54:53 -08:00
committed by GitHub
parent 4551329db0
commit 7181d4c79e
12 changed files with 101 additions and 50 deletions

View File

@@ -154,7 +154,7 @@ export class ProjectsController {
*/
public async createNewProject(creationParams: NewProjectParams): Promise<string> {
TelemetryReporter.createActionEvent(TelemetryViews.ProjectController, TelemetryActions.createNewProject)
.withAdditionalProperties({ template: creationParams.projectTypeId })
.withAdditionalProperties({ template: creationParams.projectTypeId, sdkStyle: creationParams.sdkStyle!.toString() })
.send();
if (creationParams.projectGuid && !UUID.isUUID(creationParams.projectGuid)) {
@@ -171,7 +171,7 @@ export class ProjectsController {
'PROJECT_DSP': creationParams.targetPlatform ? constants.targetPlatformToVersion.get(creationParams.targetPlatform)! : constants.defaultDSP
};
let newProjFileContents = creationParams.projectTypeId === constants.emptySqlDatabaseSdkProjectTypeId ? templates.macroExpansion(templates.newSdkSqlProjectTemplate, macroDict) : templates.macroExpansion(templates.newSqlProjectTemplate, macroDict);
let newProjFileContents = creationParams.sdkStyle ? templates.macroExpansion(templates.newSdkSqlProjectTemplate, macroDict) : templates.macroExpansion(templates.newSqlProjectTemplate, macroDict);
let newProjFileName = creationParams.newProjName;
@@ -1111,7 +1111,8 @@ export class ProjectsController {
const newProjFilePath = await this.createNewProject({
newProjName: projectInfo.projectName,
folderUri: vscode.Uri.file(projectInfo.outputFolder),
projectTypeId: constants.emptySqlDatabaseProjectTypeId
projectTypeId: constants.emptySqlDatabaseProjectTypeId,
sdkStyle: false
});
const project = await Project.openProject(newProjFilePath);
@@ -1286,7 +1287,8 @@ export class ProjectsController {
const newProjFilePath = await this.createNewProject({
newProjName: model.projName,
folderUri: vscode.Uri.file(newProjFolderUri),
projectTypeId: model.sdkStyle ? constants.emptySqlDatabaseSdkProjectTypeId : constants.emptySqlDatabaseProjectTypeId
projectTypeId: model.sdkStyle ? constants.emptySqlDatabaseSdkProjectTypeId : constants.emptySqlDatabaseProjectTypeId,
sdkStyle: model.sdkStyle
});
model.filePath = path.dirname(newProjFilePath);
@@ -1498,6 +1500,7 @@ export interface NewProjectParams {
newProjName: string;
folderUri: vscode.Uri;
projectTypeId: string;
sdkStyle: boolean;
projectGuid?: string;
targetPlatform?: SqlTargetPlatform;
}

View File

@@ -381,7 +381,7 @@ export class CreateProjectFromDatabaseDialog {
filePath: this.projectLocationTextBox!.value!,
version: '1.0.0.0',
extractTarget: mapExtractTargetEnum(<string>this.folderStructureDropDown!.value),
sdkStyle: this.sdkStyleCheckbox?.checked
sdkStyle: this.sdkStyleCheckbox?.checked!
};
azdataApi!.window.closeDialog(this.dialog);

View File

@@ -139,6 +139,7 @@ export async function createNewProjectFromDatabaseWithQuickpick(connectionInfo?:
projName: projectName,
filePath: projectLocation,
version: '1.0.0.0',
extractTarget: mapExtractTargetEnum(folderStructure)
extractTarget: mapExtractTargetEnum(folderStructure),
sdkStyle: false // todo: add sdkstyle option to quickpick
};
}

View File

@@ -18,5 +18,5 @@ export interface ImportDataModel {
filePath: string;
version: string;
extractTarget: ExtractTarget;
sdkStyle?: boolean;
sdkStyle: boolean;
}

View File

@@ -36,31 +36,24 @@ export class SqlDatabaseProjectProvider implements dataworkspace.IProjectProvide
*/
get supportedProjectTypes(): dataworkspace.IProjectType[] {
return [{
id: constants.emptySqlDatabaseSdkProjectTypeId,
projectFileExtension: constants.sqlprojExtension.replace(/\./g, ''),
displayName: constants.emptySdkProjectTypeDisplayName,
description: constants.emptySdkProjectTypeDescription,
icon: IconPathHelper.colorfulSqlProject,
targetPlatforms: Array.from(constants.targetPlatformToVersion.keys()),
defaultTargetPlatform: constants.defaultTargetPlatform,
linkDisplayValue: constants.learnMore,
linkLocation: constants.sdkLearnMoreUrl
},
{
id: constants.emptySqlDatabaseProjectTypeId,
projectFileExtension: constants.sqlprojExtension.replace(/\./g, ''),
displayName: constants.emptyProjectTypeDisplayName,
description: constants.emptyProjectTypeDescription,
icon: IconPathHelper.colorfulSqlProject,
targetPlatforms: Array.from(constants.targetPlatformToVersion.keys()),
defaultTargetPlatform: constants.defaultTargetPlatform
defaultTargetPlatform: constants.defaultTargetPlatform,
sdkStyleOption: true,
sdkStyleLearnMoreUrl: constants.sdkLearnMoreUrl
},
{
id: constants.edgeSqlDatabaseProjectTypeId,
projectFileExtension: constants.sqlprojExtension.replace(/\./g, ''),
displayName: constants.edgeProjectTypeDisplayName,
description: constants.edgeProjectTypeDescription,
icon: IconPathHelper.sqlEdgeProject
icon: IconPathHelper.sqlEdgeProject,
sdkStyleOption: true,
sdkStyleLearnMoreUrl: constants.sdkLearnMoreUrl
}];
}
@@ -71,12 +64,13 @@ export class SqlDatabaseProjectProvider implements dataworkspace.IProjectProvide
* @param projectTypeId the ID of the project/template
* @returns Uri of the newly created project file
*/
async createProject(name: string, location: vscode.Uri, projectTypeId: string, targetPlatform?: sqldbproj.SqlTargetPlatform): Promise<vscode.Uri> {
async createProject(name: string, location: vscode.Uri, projectTypeId: string, targetPlatform?: sqldbproj.SqlTargetPlatform, sdkStyle: boolean = true): Promise<vscode.Uri> {
const projectFile = await this.projectController.createNewProject({
newProjName: name,
folderUri: location,
projectTypeId: projectTypeId,
targetPlatform: targetPlatform
targetPlatform: targetPlatform,
sdkStyle: sdkStyle
});
return vscode.Uri.file(projectFile);

View File

@@ -36,7 +36,8 @@ describe('Publish Database Dialog', () => {
newProjName: 'TestProjectName',
folderUri: vscode.Uri.file(projFileDir),
projectTypeId: emptySqlDatabaseProjectTypeId,
projectGuid: 'BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575'
projectGuid: 'BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575',
sdkStyle: false
});
const project = new Project(projFilePath);
@@ -54,7 +55,8 @@ describe('Publish Database Dialog', () => {
newProjName: 'TestProjectName',
folderUri: vscode.Uri.file(projFileDir),
projectTypeId: emptySqlDatabaseProjectTypeId,
projectGuid: 'BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575'
projectGuid: 'BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575',
sdkStyle: false
});
const project = new Project(projFilePath);

View File

@@ -59,7 +59,8 @@ describe('ProjectsController', function (): void {
newProjName: 'TestProjectName',
folderUri: vscode.Uri.file(projFileDir),
projectTypeId: constants.emptySqlDatabaseProjectTypeId,
projectGuid: 'BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575'
projectGuid: 'BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575',
sdkStyle: false
});
let projFileText = (await fs.readFile(projFilePath)).toString();
@@ -77,7 +78,8 @@ describe('ProjectsController', function (): void {
folderUri: vscode.Uri.file(projFileDir),
projectTypeId: constants.emptySqlDatabaseProjectTypeId,
projectGuid: 'BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575',
targetPlatform: projTargetPlatform
targetPlatform: projTargetPlatform,
sdkStyle: false
});
const project = await Project.openProject(projFilePath);
@@ -496,7 +498,8 @@ describe('ProjectsController', function (): void {
projName: 'testProject',
filePath: 'testLocation',
version: '1.0.0.0',
extractTarget: mssql.ExtractTarget['schemaObjectType']
extractTarget: mssql.ExtractTarget['schemaObjectType'],
sdkStyle: false
});
return Promise.resolve(undefined);
@@ -520,7 +523,7 @@ describe('ProjectsController', function (): void {
let folderPath = await testUtils.generateTestFolderPath();
let projectName = 'My Project';
let importPath;
let model: ImportDataModel = { connectionUri: 'My Id', database: 'My Database', projName: projectName, filePath: folderPath, version: '1.0.0.0', extractTarget: mssql.ExtractTarget['file'] };
let model: ImportDataModel = { connectionUri: 'My Id', database: 'My Database', projName: projectName, filePath: folderPath, version: '1.0.0.0', extractTarget: mssql.ExtractTarget['file'], sdkStyle: false };
const projController = new ProjectsController(testContext.outputChannel);
projController.setFilePath(model);
@@ -533,7 +536,7 @@ describe('ProjectsController', function (): void {
let folderPath = await testUtils.generateTestFolderPath();
let projectName = 'My Project';
let importPath;
let model: ImportDataModel = { connectionUri: 'My Id', database: 'My Database', projName: projectName, filePath: folderPath, version: '1.0.0.0', extractTarget: mssql.ExtractTarget['schemaObjectType'] };
let model: ImportDataModel = { connectionUri: 'My Id', database: 'My Database', projName: projectName, filePath: folderPath, version: '1.0.0.0', extractTarget: mssql.ExtractTarget['schemaObjectType'], sdkStyle: false };
const projController = new ProjectsController(testContext.outputChannel);
projController.setFilePath(model);