CMS fit and finish (#5542)

* cms connections dont save

* added value to enum

* remove refresh and update provider name for cms

* removed ownerUri from saved connection and contributed to array

* removed owneruri

* ownerUri not needed any more

* removed AAD from cms

* initial review

* changed comments

* add back saveProfile option for connectionProfile

* review fixes and other UI improvements

* fixed auth

* added cms integration tests

* added constants

* removed utils from apiwrapper

* changed connection type name

* review comments

* clearer code and addressed reviews
This commit is contained in:
Aditya Bist
2019-05-31 11:14:37 -07:00
committed by GitHub
parent fa52478ffa
commit 1773dede25
27 changed files with 546 additions and 278 deletions

View File

@@ -8,19 +8,23 @@ import * as azdata from 'azdata';
import { AppContext } from '../../appContext';
import { TreeNode } from '../treeNode';
import { ICmsResourceTreeChangeHandler } from './treeChangeHandler';
import { generateGuid } from '../utils';
export abstract class CmsResourceTreeNodeBase extends TreeNode {
protected _id: string = undefined;
public constructor(
private _name: string,
private _description: string,
private _ownerUri: string,
protected _ownerUri: string,
public readonly appContext: AppContext,
public readonly treeChangeHandler: ICmsResourceTreeChangeHandler,
parent: TreeNode
) {
super();
this.parent = parent;
this._id = generateGuid();
}
public get name(): string {

View File

@@ -20,7 +20,6 @@ const localize = nls.loadMessageBundle();
export class CmsResourceTreeNode extends CmsResourceTreeNodeBase {
private _id: string = undefined;
private _serverGroupNodes: ServerGroupTreeNode[] = [];
public constructor(
@@ -33,13 +32,15 @@ export class CmsResourceTreeNode extends CmsResourceTreeNodeBase {
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) => {
let nodes: CmsResourceTreeNodeBase[] = [];
if (!this.ownerUri) {
this._ownerUri = await this.appContext.cmsUtils.getUriForConnection(this.connection);
}
return this.appContext.cmsUtils.createCmsServer(this.connection, this.name, this.description).then((result) => {
if (result) {
if (result.registeredServersList) {
result.registeredServersList.forEach((registeredServer) => {
@@ -70,7 +71,7 @@ export class CmsResourceTreeNode extends CmsResourceTreeNodeBase {
}
}
if (nodes.length > 0) {
return nodes;
return nodes.sort((node1, node2) => node1.name > node2.name ? 1 : -1);
} else {
return [CmsResourceMessageTreeNode.create(CmsResourceTreeNode.noResourcesLabel, undefined)];
}

View File

@@ -11,12 +11,9 @@ import { CmsResourceItemType } from '../constants';
import { CmsResourceTreeNodeBase } from './baseTreeNodes';
import { AppContext } from '../../appContext';
import { ICmsResourceTreeChangeHandler } from './treeChangeHandler';
import { generateGuid } from '../utils';
export class RegisteredServerTreeNode extends CmsResourceTreeNodeBase {
private _id: string = undefined;
constructor(
name: string,
description: string,
@@ -28,7 +25,6 @@ export class RegisteredServerTreeNode extends CmsResourceTreeNodeBase {
parent: TreeNode
) {
super(name, description, ownerUri, appContext, treeChangeHandler, parent);
this._id = `cms_registeredServer_${this.name ? this.name : this.serverName}`;
}
public async getChildren(): Promise<TreeNode[]> {
@@ -37,7 +33,7 @@ export class RegisteredServerTreeNode extends CmsResourceTreeNodeBase {
public getTreeItem(): azdata.TreeItem | Promise<azdata.TreeItem> {
let payload = {
id: generateGuid(),
id: this._id,
connectionName: this.name ? this.name : this.serverName,
serverName: this.serverName,
databaseName: '',

View File

@@ -18,7 +18,6 @@ import { CmsResourceTreeNode } from './cmsResourceTreeNode';
export class ServerGroupTreeNode extends CmsResourceTreeNodeBase {
private _id: string = undefined;
private _serverGroupNodes: ServerGroupTreeNode[] = [];
constructor(
@@ -31,12 +30,11 @@ export class ServerGroupTreeNode extends CmsResourceTreeNodeBase {
parent: TreeNode
) {
super(name, description, ownerUri, appContext, treeChangeHandler, parent);
this._id = `cms_serverGroup_${this.name}`;
}
public getChildren(): TreeNode[] | Promise<TreeNode[]> {
try {
let nodes = [];
return this.appContext.apiWrapper.getRegisteredServers(this.ownerUri, this.relativePath).then((result) => {
return this.appContext.cmsUtils.getRegisteredServers(this.ownerUri, this.relativePath).then((result) => {
if (result) {
if (result.registeredServersList) {
result.registeredServersList.forEach((registeredServer) => {
@@ -86,7 +84,7 @@ export class ServerGroupTreeNode extends CmsResourceTreeNodeBase {
item.id = this._id;
item.tooltip = this.description;
item.iconPath = {
dark: this.appContext.extensionContext.asAbsolutePath('resources/light/folder.svg'),
dark: this.appContext.extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
light: this.appContext.extensionContext.asAbsolutePath('resources/light/folder.svg')
};
return item;

View File

@@ -35,18 +35,18 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
// Call to collect all locally saved CMS servers
// to determine whether the system has been initialized.
let cmsConfig = this._appContext.apiWrapper.getConfiguration();
let cachedServers = cmsConfig ? cmsConfig.cmsServers : [];
let cachedServers = cmsConfig.servers ? cmsConfig.servers : [];
if (cachedServers && cachedServers.length > 0) {
let servers = [];
cachedServers.forEach((server) => {
cachedServers.forEach(async (server) => {
servers.push(new CmsResourceTreeNode(
server.name,
server.description,
server.ownerUri,
undefined,
server.connection,
this._appContext, this, null));
this.appContext.apiWrapper.cacheRegisteredCmsServer(server.name, server.description,
server.ownerUri, server.connection);
this.appContext.cmsUtils.cacheRegisteredCmsServer(server.name, server.description,
undefined, server.connection);
});
return servers;
}
@@ -59,11 +59,16 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
return [CmsResourceMessageTreeNode.create(CmsResourceTreeProvider.loadingLabel, undefined)];
}
try {
let registeredCmsServers = this.appContext.apiWrapper.registeredCmsServers;
let registeredCmsServers = this.appContext.cmsUtils.registeredCmsServers;
if (registeredCmsServers && registeredCmsServers.length > 0) {
this.isSystemInitialized = true;
// save the CMS Servers for future use
await this._appContext.apiWrapper.setConfiguration(registeredCmsServers);
let toSaveCmsServers = JSON.parse(JSON.stringify(registeredCmsServers));
toSaveCmsServers.forEach(server => {
server.ownerUri = undefined,
server.connection.options.password = '';
});
await this._appContext.apiWrapper.setConfiguration(toSaveCmsServers);
return registeredCmsServers.map((server) => {
return new CmsResourceTreeNode(
server.name,
@@ -71,10 +76,9 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
server.ownerUri,
server.connection,
this._appContext, this, null);
});
}).sort((a, b) => a.name.localeCompare(b.name));
} else {
return [new CmsResourceEmptyTreeNode()];
}
} catch (error) {
return [new CmsResourceEmptyTreeNode()];