Skip to content

Commit

Permalink
remove circular dependency between server group and connection manage…
Browse files Browse the repository at this point in the history
…ment (microsoft#6916)
  • Loading branch information
Anthony Dresser authored Aug 23, 2019
1 parent d6950fa commit 5b9a083
Show file tree
Hide file tree
Showing 10 changed files with 30 additions and 71 deletions.
10 changes: 0 additions & 10 deletions src/sql/platform/connection/common/connectionManagement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,16 +80,6 @@ export interface IConnectionManagementService {
*/
showConnectionDialog(params?: INewConnectionParams, options?: IConnectionCompletionOptions, model?: IConnectionProfile, connectionResult?: IConnectionResult): Promise<void>;

/**
* Opens the add server group dialog
*/
showCreateServerGroupDialog(callbacks?: IServerGroupDialogCallbacks): Promise<void>;

/**
* Opens the edit server group dialog
*/
showEditServerGroupDialog(group: ConnectionProfileGroup): Promise<void>;

/**
* Load the password and opens a new connection
*/
Expand Down
29 changes: 0 additions & 29 deletions src/sql/platform/connection/common/connectionManagementService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ export class ConnectionManagementService extends Disposable implements IConnecti
private _connectionStore: ConnectionStore,
private _connectionStatusManager: ConnectionStatusManager,
@IConnectionDialogService private _connectionDialogService: IConnectionDialogService,
@IServerGroupController private _serverGroupController: IServerGroupController,
@IInstantiationService private _instantiationService: IInstantiationService,
@IEditorService private _editorService: IEditorService,
@ITelemetryService private _telemetryService: ITelemetryService,
Expand Down Expand Up @@ -202,34 +201,6 @@ export class ConnectionManagementService extends Disposable implements IConnecti
});
}

/**
* Opens the add server group dialog
*/
public showCreateServerGroupDialog(callbacks?: IServerGroupDialogCallbacks): Promise<void> {
let self = this;
return new Promise<void>((resolve, reject) => {
self._serverGroupController.showCreateGroupDialog(self, callbacks).then(() => {
resolve();
}, error => {
reject();
});
});
}

/**
* Opens the edit server group dialog
*/
public showEditServerGroupDialog(group: ConnectionProfileGroup): Promise<void> {
let self = this;
return new Promise<void>((resolve, reject) => {
self._serverGroupController.showEditGroupDialog(self, group).then(() => {
resolve();
}, error => {
reject();
});
});
}

/**
* Load the password for the profile
* @param connectionProfile Connection Profile
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@ suite('SQL ConnectionManagementService tests', () => {
connectionStore.object,
undefined,
connectionDialogService.object,
undefined, // IServerGroupController
undefined, // IInstantiationService
workbenchEditorService.object,
undefined, // ITelemetryService
Expand Down Expand Up @@ -946,7 +945,7 @@ suite('SQL ConnectionManagementService tests', () => {
connectionStoreMock.setup(x => x.getConnectionProfileGroups(TypeMoq.It.isAny(), undefined)).returns(() => {
return [group1];
});
const connectionManagementService = new ConnectionManagementService(connectionStoreMock.object, connectionStatusManagerMock.object, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
const connectionManagementService = new ConnectionManagementService(connectionStoreMock.object, connectionStatusManagerMock.object, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);

// dupe connections have been seeded the numbers below already reflected the de-duped results

Expand Down
5 changes: 2 additions & 3 deletions src/sql/platform/serverGroup/common/serverGroupController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import { createDecorator } from 'vs/platform/instantiation/common/instantiation';

import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
import { ConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';

export interface IServerGroupDialogCallbacks {
Expand All @@ -15,6 +14,6 @@ export interface IServerGroupDialogCallbacks {
export const IServerGroupController = createDecorator<IServerGroupController>('serverGroupController');
export interface IServerGroupController {
_serviceBrand: any;
showCreateGroupDialog(connectionManagementService: IConnectionManagementService, callbacks?: IServerGroupDialogCallbacks): Promise<void>;
showEditGroupDialog(connectionManagementService: IConnectionManagementService, group: ConnectionProfileGroup): Promise<void>;
showCreateGroupDialog(callbacks?: IServerGroupDialogCallbacks): Promise<void>;
showEditGroupDialog(group: ConnectionProfileGroup): Promise<void>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { ObjectExplorerActionsContext } from 'sql/workbench/parts/objectExplorer
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
import { UNSAVED_GROUP_ID } from 'sql/platform/connection/common/constants';
import { IServerGroupController } from 'sql/platform/serverGroup/common/serverGroupController';

export class RefreshAction extends Action {

Expand Down Expand Up @@ -173,14 +174,14 @@ export class AddServerGroupAction extends Action {
constructor(
id: string,
label: string,
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService
@IServerGroupController private readonly serverGroupController: IServerGroupController
) {
super(id, label);
this.class = 'add-server-group-action';
}

public run(): Promise<boolean> {
this._connectionManagementService.showCreateServerGroupDialog();
this.serverGroupController.showCreateGroupDialog();
return Promise.resolve(true);
}
}
Expand All @@ -196,14 +197,14 @@ export class EditServerGroupAction extends Action {
id: string,
label: string,
private _group: ConnectionProfileGroup,
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService
@IServerGroupController private readonly serverGroupController: IServerGroupController
) {
super(id, label);
this.class = 'edit-server-group-action';
}

public run(): Promise<boolean> {
this._connectionManagementService.showEditServerGroupDialog(this._group);
this.serverGroupController.showEditGroupDialog(this._group);
return Promise.resolve(true);
}
}
Expand Down Expand Up @@ -231,8 +232,7 @@ export class ActiveConnectionsFilterAction extends Action {
constructor(
id: string,
label: string,
private view: ServerTreeView,
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService
private view: ServerTreeView
) {
super(id, label);
this.class = ActiveConnectionsFilterAction.enabledClass;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ suite('SQL Connection Tree Action tests', () => {
let serverTreeView = TypeMoq.Mock.ofType(ServerTreeView, TypeMoq.MockBehavior.Strict, undefined, instantiationService.object, undefined, undefined, undefined, undefined, capabilitiesService);
serverTreeView.setup(x => x.showFilteredTree(TypeMoq.It.isAnyString()));
serverTreeView.setup(x => x.refreshTree());
let connectionTreeAction: ActiveConnectionsFilterAction = new ActiveConnectionsFilterAction(ActiveConnectionsFilterAction.ID, ActiveConnectionsFilterAction.LABEL, serverTreeView.object, connectionManagementService.object);
let connectionTreeAction: ActiveConnectionsFilterAction = new ActiveConnectionsFilterAction(ActiveConnectionsFilterAction.ID, ActiveConnectionsFilterAction.LABEL, serverTreeView.object);
connectionTreeAction.run().then((value) => {
serverTreeView.verify(x => x.showFilteredTree('active'), TypeMoq.Times.once());
}).then(() => done(), (err) => done(err));
Expand All @@ -237,7 +237,7 @@ suite('SQL Connection Tree Action tests', () => {
let serverTreeView = TypeMoq.Mock.ofType(ServerTreeView, TypeMoq.MockBehavior.Strict, undefined, instantiationService.object, undefined, undefined, undefined, undefined, capabilitiesService);
serverTreeView.setup(x => x.showFilteredTree(TypeMoq.It.isAnyString()));
serverTreeView.setup(x => x.refreshTree());
let connectionTreeAction: ActiveConnectionsFilterAction = new ActiveConnectionsFilterAction(ActiveConnectionsFilterAction.ID, ActiveConnectionsFilterAction.LABEL, serverTreeView.object, connectionManagementService.object);
let connectionTreeAction: ActiveConnectionsFilterAction = new ActiveConnectionsFilterAction(ActiveConnectionsFilterAction.ID, ActiveConnectionsFilterAction.LABEL, serverTreeView.object);
connectionTreeAction.isSet = true;
connectionTreeAction.run().then((value) => {
serverTreeView.verify(x => x.refreshTree(), TypeMoq.Times.once());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,22 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { ConnectionProviderProperties } from 'sql/workbench/parts/connection/common/connectionProviderExtension';
import { ConnectionController } from 'sql/workbench/services/connection/browser/connectionController';
import { CmsConnectionWidget } from 'sql/workbench/services/connection/browser/cmsConnectionWidget';
import { IServerGroupController } from 'sql/platform/serverGroup/common/serverGroupController';

/**
* Connection Controller for CMS Connections
*/
export class CmsConnectionController extends ConnectionController {

constructor(
connectionManagementService: IConnectionManagementService,
connectionProperties: ConnectionProviderProperties,
callback: IConnectionComponentCallbacks,
providerName: string,
@IInstantiationService _instantiationService: IInstantiationService) {
super(connectionManagementService, connectionProperties, callback, providerName, _instantiationService);
@IConnectionManagementService _connectionManagementService: IConnectionManagementService,
@IInstantiationService _instantiationService: IInstantiationService,
@IServerGroupController _serverGroupController: IServerGroupController
) {
super(connectionProperties, callback, providerName, _connectionManagementService, _instantiationService, _serverGroupController);
let specialOptions = this._providerOptions.filter(
(property) => (property.specialValueType !== null && property.specialValueType !== undefined));
this._connectionWidget = this._instantiationService.createInstance(CmsConnectionWidget, specialOptions, {
Expand All @@ -40,4 +43,4 @@ export class CmsConnectionController extends ConnectionController {
this._databaseCache = new Map<string, string[]>();
this._connectionWidget.createConnectionWidget(container, authTypeChanged);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes';
import { ConnectionProviderProperties } from 'sql/workbench/parts/connection/common/connectionProviderExtension';
import { ConnectionWidget } from 'sql/workbench/services/connection/browser/connectionWidget';
import { IServerGroupController } from 'sql/platform/serverGroup/common/serverGroupController';

export class ConnectionController implements IConnectionComponentController {
private _connectionManagementService: IConnectionManagementService;
private _advancedController: AdvancedPropertiesController;
private _model: IConnectionProfile;
private _providerName: string;
Expand All @@ -28,12 +28,13 @@ export class ConnectionController implements IConnectionComponentController {
protected _databaseCache = new Map<string, string[]>();

constructor(
connectionManagementService: IConnectionManagementService,
connectionProperties: ConnectionProviderProperties,
callback: IConnectionComponentCallbacks,
providerName: string,
@IInstantiationService protected _instantiationService: IInstantiationService) {
this._connectionManagementService = connectionManagementService;
@IConnectionManagementService protected readonly _connectionManagementService: IConnectionManagementService,
@IInstantiationService protected readonly _instantiationService: IInstantiationService,
@IServerGroupController protected readonly _serverGroupController: IServerGroupController
) {
this._callback = callback;
this._providerOptions = connectionProperties.connectionOptions;
let specialOptions = this._providerOptions.filter(
Expand Down Expand Up @@ -89,7 +90,7 @@ export class ConnectionController implements IConnectionComponentController {
}

protected onCreateNewServerGroup(): void {
this._connectionManagementService.showCreateServerGroupDialog({
this._serverGroupController.showCreateGroupDialog({
onAddGroup: (groupName) => this._connectionWidget.updateServerGroup(this.getAllServerGroups(), groupName),
onClose: () => this._connectionWidget.focusOnServerGroup()
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,14 +276,12 @@ export class ConnectionDialogService implements IConnectionDialogService {
if (providerName === Constants.cmsProviderName) {
this._connectionControllerMap[providerName] =
this._instantiationService.createInstance(CmsConnectionController,
this._connectionManagementService,
this._capabilitiesService.getCapabilities(providerName).connection, {
onSetConnectButton: (enable: boolean) => this.handleSetConnectButtonEnable(enable)
}, providerName);
} else {
this._connectionControllerMap[providerName] =
this._instantiationService.createInstance(ConnectionController,
this._connectionManagementService,
this._capabilitiesService.getCapabilities(providerName).connection, {
onSetConnectButton: (enable: boolean) => this.handleSetConnectButtonEnable(enable)
}, providerName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ export class ServerGroupController implements IServerGroupController {
_serviceBrand: any;

private _serverGroupDialog: ServerGroupDialog;
private _connectionManagementService: IConnectionManagementService;
private _callbacks: IServerGroupDialogCallbacks;
private _group: ConnectionProfileGroup;
private _viewModel: ServerGroupViewModel;

constructor(
@IErrorMessageService private _errorMessageService: IErrorMessageService,
@IInstantiationService private _instantiationService: IInstantiationService,
@IConfigurationService private _configurationService: IConfigurationService
@IConfigurationService private _configurationService: IConfigurationService,
@IConnectionManagementService private readonly connectionManagementService: IConnectionManagementService
) {
}

Expand All @@ -37,7 +37,7 @@ export class ServerGroupController implements IServerGroupController {
this._group.name = this._viewModel.groupName;
this._group.color = this._viewModel.groupColor;
this._group.description = this._viewModel.groupDescription;
this._connectionManagementService.editGroup(this._group).then(() => {
this.connectionManagementService.editGroup(this._group).then(() => {
this._serverGroupDialog.close();
}).catch(err => {
// rollback changes made
Expand All @@ -53,7 +53,7 @@ export class ServerGroupController implements IServerGroupController {
color: this._viewModel.groupColor,
description: this._viewModel.groupDescription
};
this._connectionManagementService.saveProfileGroup(newGroup).then(groupId => {
this.connectionManagementService.saveProfileGroup(newGroup).then(groupId => {
if (this._callbacks) {
this._callbacks.onAddGroup(this._serverGroupDialog.groupName);
}
Expand All @@ -75,16 +75,14 @@ export class ServerGroupController implements IServerGroupController {
}


public showCreateGroupDialog(connectionManagementService: IConnectionManagementService, callbacks?: IServerGroupDialogCallbacks): Promise<void> {
this._connectionManagementService = connectionManagementService;
public showCreateGroupDialog(callbacks?: IServerGroupDialogCallbacks): Promise<void> {
this._group = null;
this._viewModel = new ServerGroupViewModel(undefined, this._configurationService.getValue(SERVER_GROUP_CONFIG)[SERVER_GROUP_COLORS_CONFIG]);
this._callbacks = callbacks ? callbacks : undefined;
return this.openServerGroupDialog();
}

public showEditGroupDialog(connectionManagementService: IConnectionManagementService, group: ConnectionProfileGroup): Promise<void> {
this._connectionManagementService = connectionManagementService;
public showEditGroupDialog(group: ConnectionProfileGroup): Promise<void> {
this._group = group;
this._viewModel = new ServerGroupViewModel(group, this._configurationService.getValue(SERVER_GROUP_CONFIG)[SERVER_GROUP_COLORS_CONFIG]);
return this.openServerGroupDialog();
Expand Down

0 comments on commit 5b9a083

Please sign in to comment.