mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-19 01:25:36 -05:00
* 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
78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* 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 vscode from 'vscode';
|
|
|
|
type TreeNodePredicate = (node: TreeNode) => boolean;
|
|
|
|
export abstract class TreeNode {
|
|
public generateNodePath(): string {
|
|
let path = undefined;
|
|
if (this.parent) {
|
|
path = this.parent.generateNodePath();
|
|
}
|
|
path = path ? `${path}/${this.nodePathValue}` : this.nodePathValue;
|
|
return path;
|
|
}
|
|
|
|
public findNodeByPath(path: string, expandIfNeeded: boolean = false): Promise<TreeNode> {
|
|
let condition: TreeNodePredicate = (node: TreeNode) => node.getNodeInfo().nodePath === path;
|
|
let filter: TreeNodePredicate = (node: TreeNode) => path.startsWith(node.getNodeInfo().nodePath);
|
|
return TreeNode.findNode(this, condition, filter, true);
|
|
}
|
|
|
|
public static async findNode(node: TreeNode, condition: TreeNodePredicate, filter: TreeNodePredicate, expandIfNeeded: boolean): Promise<TreeNode> {
|
|
if (!node) {
|
|
return undefined;
|
|
}
|
|
|
|
if (condition(node)) {
|
|
return node;
|
|
}
|
|
|
|
let nodeInfo = node.getNodeInfo();
|
|
if (nodeInfo.isLeaf) {
|
|
return undefined;
|
|
}
|
|
|
|
// TODO support filtering by already expanded / not yet expanded
|
|
let children = await node.getChildren(false);
|
|
if (children) {
|
|
for (let child of children) {
|
|
if (filter && filter(child)) {
|
|
let childNode = await this.findNode(child, condition, filter, expandIfNeeded);
|
|
if (childNode) {
|
|
return childNode;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
public get parent(): TreeNode {
|
|
return this._parent;
|
|
}
|
|
|
|
public set parent(node: TreeNode) {
|
|
this._parent = node;
|
|
}
|
|
|
|
public abstract getChildren(refreshChildren: boolean): TreeNode[] | Promise<TreeNode[]>;
|
|
public abstract getTreeItem(): vscode.TreeItem | Promise<vscode.TreeItem>;
|
|
|
|
public abstract getNodeInfo(): azdata.NodeInfo;
|
|
|
|
/**
|
|
* The value to use for this node in the node path
|
|
*/
|
|
public abstract get nodePathValue(): string;
|
|
|
|
private _parent: TreeNode = undefined;
|
|
}
|