CMS Extension - 2 (#4908)

* first set of changes to experiment the registration of cms related apis

* Adding cms service entry to workbench

* Adding basic functionality for add remove reg servers and group

* Returning relative path as part of RegServerResult as string

* initial extension

* cleaned building with connecting to server

* get list of registered servers

* progress with registered servers tree

* cms base node with server selection

* removed unused services

* replaced azure stuff with cms

* removed cmsResourceService

* list servers progress

* Removing the cms apis from core. Having mssql extension expose them for cms extension

* create server working fine

* initial expansion and nodes

* Propogating the backend name changes to apis

* initial cms extension working

* cached connection needs change in api

* connect without dashboard in proposed

* Fixing some missing sqlops references

* add registered server bug found

* added refresh context menu option

* added payload

* server description not disabled after reject connection

* added more context actions and action icons

* added empty resource and error when same name server is added

* fixed connection issues with cms and normal connections

* added initial tests

* added cms icons

* removed azure readme

* test script revert

* fix build tests

* added more cms tests

* fixed test script

* fixed silent error when expanding servers

* added more cms tests

* removed cmsdialog from api

* cms dialog without object

* fixed theming issues

* initial connection dialog done

* can make connections

* PM asks for strings and icons

* removed search

* removed unused code and fixed 1 test

* fix connection management tests

* changed icons

* format file

* fixed hygiene

* initial cr comments

* refactored cms connection dialog

* fixed bug when switching dialogs

* localized connection provider options

* fixed cms provider name

* code review comments

* localized options in cms and mssql

* localized more options
This commit is contained in:
Aditya Bist
2019-04-29 15:16:59 -07:00
committed by GitHub
parent cbf3ca726f
commit 39772c2dbe
60 changed files with 4595 additions and 156 deletions

View File

@@ -0,0 +1,124 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as azdata from 'azdata';
import * as nls from 'vscode-nls';
import { TreeItemCollapsibleState } from 'vscode';
import { AppContext } from '../../appContext';
import { TreeNode } from '../treeNode';
import { CmsResourceTreeNodeBase } from './baseTreeNodes';
import { CmsResourceItemType } from '../constants';
import { ICmsResourceTreeChangeHandler } from './treeChangeHandler';
import { RegisteredServerTreeNode } from './registeredServerTreeNode';
import { ServerGroupTreeNode } from './serverGroupTreeNode';
import { CmsResourceMessageTreeNode } from '../messageTreeNode';
const localize = nls.loadMessageBundle();
export class CmsResourceTreeNode extends CmsResourceTreeNodeBase {
private _id: string = undefined;
private _serverGroupNodes: ServerGroupTreeNode[] = [];
public constructor(
name: string,
description: string,
ownerUri: string,
private _connection: azdata.connection.Connection,
appContext: AppContext,
treeChangeHandler: ICmsResourceTreeChangeHandler,
parent: TreeNode
) {
super(name, description, ownerUri, appContext, treeChangeHandler, parent);
this._id = `cms_cmsServer_${this.name}`;
}
public async getChildren(): Promise<TreeNode[]> {
try {
let nodes: TreeNode[] = [];
return this.appContext.apiWrapper.createCmsServer(this.connection, this.name, this.description).then(async (result) => {
if (result) {
if (result.registeredServersList) {
result.registeredServersList.forEach((registeredServer) => {
nodes.push(new RegisteredServerTreeNode(
registeredServer.name,
registeredServer.description,
registeredServer.serverName,
registeredServer.relativePath,
this.ownerUri,
this.appContext,
this.treeChangeHandler, this));
});
}
if (result.registeredServerGroups) {
if (result.registeredServerGroups) {
this._serverGroupNodes = [];
result.registeredServerGroups.forEach((serverGroup) => {
let serverGroupNode = new ServerGroupTreeNode(
serverGroup.name,
serverGroup.description,
serverGroup.relativePath,
this.ownerUri,
this.appContext,
this.treeChangeHandler, this);
nodes.push(serverGroupNode);
this._serverGroupNodes.push(serverGroupNode);
});
}
}
if (nodes.length > 0) {
return nodes;
} else {
return [CmsResourceMessageTreeNode.create(CmsResourceTreeNode.noResourcesLabel, undefined)];
}
}
});
} catch {
return [];
}
}
public getTreeItem(): azdata.TreeItem | Promise<azdata.TreeItem> {
const item = new azdata.TreeItem(this.name, TreeItemCollapsibleState.Collapsed);
item.contextValue = CmsResourceItemType.cmsNodeContainer;
item.id = this._id;
item.tooltip = this.description;
item.iconPath = {
dark: this.appContext.extensionContext.asAbsolutePath('resources/light/centralmanagement_server.svg'),
light: this.appContext.extensionContext.asAbsolutePath('resources/light/centralmanagement_server.svg')
};
return item;
}
public getNodeInfo(): azdata.NodeInfo {
return {
label: this.name,
isLeaf: false,
errorMessage: undefined,
metadata: undefined,
nodePath: this.generateNodePath(),
nodeStatus: undefined,
nodeType: CmsResourceItemType.cmsNodeContainer,
nodeSubType: undefined,
iconType: CmsResourceItemType.cmsNodeContainer
};
}
public get nodePathValue(): string {
return this._id;
}
public get connection(): azdata.connection.Connection {
return this._connection;
}
public get serverGroupNodes(): ServerGroupTreeNode[] {
return this._serverGroupNodes;
}
public static readonly noResourcesLabel = localize('cms.resource.cmsResourceTreeNode.noResourcesLabel', 'No resources found');
}