Files
azuredatastudio/extensions/data-workspace/src/common/projectProviderRegistry.ts
Benjin Dubishar 1c0259f4c5 Telemetry points for SQL Database Projects extension (#14088)
* Added publish and schema compare telemetry
* Adding telemetry points for add/exclude/delete
* telemetry for validation
* Adding telemetry from project roundtrip updates, editing sqlproj, and db refs
* Changed method for obtaining extension ID during registration
* Fixing test failures, updating ads telemetry package dependency
* replacing action strings with enums
* change database project string actions to enums
* Changed action name to better match dialog
* PR feedback
2021-01-31 16:38:48 -08:00

62 lines
2.5 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 { IProjectProvider } from 'dataworkspace';
import * as vscode from 'vscode';
import { IProjectProviderRegistry } from './interfaces';
import { TelemetryActions, TelemetryReporter, TelemetryViews } from './telemetry';
export const ProjectProviderRegistry: IProjectProviderRegistry = new class implements IProjectProviderRegistry {
private _providers = new Array<IProjectProvider>();
private _providerFileExtensionMapping: { [key: string]: IProjectProvider } = {};
private _providerProjectTypeMapping: { [key: string]: IProjectProvider } = {};
registerProvider(provider: IProjectProvider, providerId: string): vscode.Disposable {
this.validateProvider(provider);
this._providers.push(provider);
provider.supportedProjectTypes.forEach(projectType => {
this._providerFileExtensionMapping[projectType.projectFileExtension.toUpperCase()] = provider;
this._providerProjectTypeMapping[projectType.id.toUpperCase()] = provider;
});
TelemetryReporter.createActionEvent(TelemetryViews.ProviderRegistration, TelemetryActions.ProviderRegistered)
.withAdditionalProperties({
providerId: providerId,
extensions: provider.supportedProjectTypes.map(p => p.projectFileExtension).sort().join(', ')
})
.send();
return new vscode.Disposable(() => {
const idx = this._providers.indexOf(provider);
if (idx >= 0) {
this._providers.splice(idx, 1);
provider.supportedProjectTypes.forEach(projectType => {
delete this._providerFileExtensionMapping[projectType.projectFileExtension.toUpperCase()];
delete this._providerProjectTypeMapping[projectType.id.toUpperCase()];
});
}
});
}
get providers(): IProjectProvider[] {
return this._providers.slice(0);
}
clear(): void {
this._providers.length = 0;
}
validateProvider(provider: IProjectProvider): void {
}
getProviderByProjectExtension(extension: string): IProjectProvider | undefined {
return extension ? this._providerFileExtensionMapping[extension.toUpperCase()] : undefined;
}
getProviderByProjectType(projectType: string): IProjectProvider | undefined {
return projectType ? this._providerProjectTypeMapping[projectType.toUpperCase()] : undefined;
}
};