mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-04 01:25:38 -05:00
More layering (#9111)
* move handling generated files to the serilization classes * remove unneeded methods * add more folders to strictire compile, add more strict compile options * update ci * wip * add more layering and fix issues * add more strictness * remove unnecessary assertion * add missing checks * fix indentation * wip * remove jsdoc * fix layering * fix compile * fix compile errors * wip * wip * finish layering * fix css * more layering * rip * reworking results serializer * move some files around * move capabilities to platform wip * implement capabilities register provider * fix capabilities service * fix usage of the regist4ry * add contribution * remove no longer good parts * fix issues with startup * another try * fix startup * fix imports * fix tests * fix tests * fix more tests * fix tests * fix more tests * fix broken test * fix tabbing * fix naming
This commit is contained in:
@@ -7,48 +7,13 @@ import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { IExtensionPointUser, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry';
|
||||
import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
||||
import { localize } from 'vs/nls';
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { deepClone } from 'vs/base/common/objects';
|
||||
|
||||
import * as resources from 'vs/base/common/resources';
|
||||
import { ConnectionProviderProperties } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||
|
||||
export const Extensions = {
|
||||
ConnectionProviderContributions: 'connection.providers'
|
||||
};
|
||||
|
||||
export interface IConnectionProviderRegistry {
|
||||
registerConnectionProvider(id: string, properties: ConnectionProviderProperties): void;
|
||||
getProperties(id: string): ConnectionProviderProperties | undefined;
|
||||
readonly onNewProvider: Event<{ id: string, properties: ConnectionProviderProperties }>;
|
||||
readonly providers: { [id: string]: ConnectionProviderProperties };
|
||||
}
|
||||
|
||||
class ConnectionProviderRegistryImpl implements IConnectionProviderRegistry {
|
||||
private _providers = new Map<string, ConnectionProviderProperties>();
|
||||
private _onNewProvider = new Emitter<{ id: string, properties: ConnectionProviderProperties }>();
|
||||
public readonly onNewProvider: Event<{ id: string, properties: ConnectionProviderProperties }> = this._onNewProvider.event;
|
||||
|
||||
public registerConnectionProvider(id: string, properties: ConnectionProviderProperties): void {
|
||||
this._providers.set(id, properties);
|
||||
this._onNewProvider.fire({ id, properties });
|
||||
}
|
||||
|
||||
public getProperties(id: string): ConnectionProviderProperties | undefined {
|
||||
return this._providers.get(id);
|
||||
}
|
||||
|
||||
public get providers(): { [id: string]: ConnectionProviderProperties } {
|
||||
let rt: { [id: string]: ConnectionProviderProperties } = {};
|
||||
this._providers.forEach((v, k) => {
|
||||
rt[k] = deepClone(v);
|
||||
});
|
||||
return rt;
|
||||
}
|
||||
}
|
||||
|
||||
const connectionRegistry = new ConnectionProviderRegistryImpl();
|
||||
Registry.add(Extensions.ConnectionProviderContributions, connectionRegistry);
|
||||
import { ConnectionProviderProperties, ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
|
||||
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
||||
import type { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { isArray } from 'vs/base/common/types';
|
||||
|
||||
const ConnectionProviderContrib: IJSONSchema = {
|
||||
type: 'object',
|
||||
@@ -166,24 +131,42 @@ const ConnectionProviderContrib: IJSONSchema = {
|
||||
required: ['providerId']
|
||||
};
|
||||
|
||||
ExtensionsRegistry.registerExtensionPoint<ConnectionProviderProperties | ConnectionProviderProperties[]>({ extensionPoint: 'connectionProvider', jsonSchema: ConnectionProviderContrib }).setHandler(extensions => {
|
||||
const connectionProviderExtPoint = ExtensionsRegistry.registerExtensionPoint<ConnectionProviderProperties | ConnectionProviderProperties[]>({ extensionPoint: 'connectionProvider', jsonSchema: ConnectionProviderContrib });
|
||||
|
||||
function handleCommand(contrib: ConnectionProviderProperties, extension: IExtensionPointUser<any>) {
|
||||
connectionRegistry.registerConnectionProvider(contrib.providerId, contrib);
|
||||
}
|
||||
class ConnectionProviderHandler implements IWorkbenchContribution {
|
||||
private disposables = new Map<ConnectionProviderProperties, IDisposable>();
|
||||
|
||||
for (let extension of extensions) {
|
||||
const { value } = extension;
|
||||
resolveIconPath(extension);
|
||||
if (Array.isArray<ConnectionProviderProperties>(value)) {
|
||||
for (let command of value) {
|
||||
handleCommand(command, extension);
|
||||
constructor(@ICapabilitiesService capabilitiesService: ICapabilitiesService) {
|
||||
connectionProviderExtPoint.setHandler((extensions, delta) => {
|
||||
|
||||
function handleProvider(contrib: ConnectionProviderProperties) {
|
||||
return capabilitiesService.registerConnectionProvider(contrib.providerId, contrib);
|
||||
}
|
||||
} else {
|
||||
handleCommand(value, extension);
|
||||
}
|
||||
|
||||
delta.added.forEach(added => {
|
||||
resolveIconPath(added);
|
||||
if (isArray(added.value)) {
|
||||
for (const provider of added.value) {
|
||||
this.disposables.set(provider, handleProvider(provider));
|
||||
}
|
||||
} else {
|
||||
this.disposables.set(added.value, handleProvider(added.value));
|
||||
}
|
||||
});
|
||||
delta.removed.forEach(removed => {
|
||||
if (isArray(removed.value)) {
|
||||
for (const provider of removed.value) {
|
||||
this.disposables.get(provider)!.dispose();
|
||||
}
|
||||
} else {
|
||||
this.disposables.get(removed.value)!.dispose();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution(ConnectionProviderHandler, LifecyclePhase.Restored);
|
||||
|
||||
function resolveIconPath(extension: IExtensionPointUser<any>): void {
|
||||
if (!extension || !extension.value) { return undefined; }
|
||||
|
||||
Reference in New Issue
Block a user