From f720ec642f6ffd51d8772f663a611292f91a563d Mon Sep 17 00:00:00 2001 From: Gene Lee Date: Fri, 12 Jul 2019 18:34:13 -0600 Subject: [PATCH] Put 'loading' text while loading the saved controllers in Big Data Cluster extension (#6375) --- .../src/bigDataCluster/constants.ts | 3 +- ...rollerTreeNode.ts => addControllerNode.ts} | 0 .../tree/controllerTreeDataProvider.ts | 58 ++++++++++++++++--- .../tree/loadingControllerNode.ts | 47 +++++++++++++++ 4 files changed, 98 insertions(+), 10 deletions(-) rename extensions/big-data-cluster/src/bigDataCluster/tree/{addControllerTreeNode.ts => addControllerNode.ts} (100%) create mode 100644 extensions/big-data-cluster/src/bigDataCluster/tree/loadingControllerNode.ts diff --git a/extensions/big-data-cluster/src/bigDataCluster/constants.ts b/extensions/big-data-cluster/src/bigDataCluster/constants.ts index cf1ddfee2e..075c70cc9c 100644 --- a/extensions/big-data-cluster/src/bigDataCluster/constants.ts +++ b/extensions/big-data-cluster/src/bigDataCluster/constants.ts @@ -13,7 +13,8 @@ export enum BdcItemType { folder = 'bigDataClusters.itemType.folderNode', sqlMaster = 'bigDataClusters.itemType.sqlMasterNode', EndPoint = 'bigDataClusters.itemType.endPointNode', - addController = 'bigDataClusters.itemType.addControllerNode' + addController = 'bigDataClusters.itemType.addControllerNode', + loadingController = 'bigDataClusters.itemType.loadingControllerNode' } export class IconPath { diff --git a/extensions/big-data-cluster/src/bigDataCluster/tree/addControllerTreeNode.ts b/extensions/big-data-cluster/src/bigDataCluster/tree/addControllerNode.ts similarity index 100% rename from extensions/big-data-cluster/src/bigDataCluster/tree/addControllerTreeNode.ts rename to extensions/big-data-cluster/src/bigDataCluster/tree/addControllerNode.ts diff --git a/extensions/big-data-cluster/src/bigDataCluster/tree/controllerTreeDataProvider.ts b/extensions/big-data-cluster/src/bigDataCluster/tree/controllerTreeDataProvider.ts index b6b3a3ae20..f2dda6e0b5 100644 --- a/extensions/big-data-cluster/src/bigDataCluster/tree/controllerTreeDataProvider.ts +++ b/extensions/big-data-cluster/src/bigDataCluster/tree/controllerTreeDataProvider.ts @@ -9,10 +9,11 @@ import * as vscode from 'vscode'; import * as azdata from 'azdata'; import { TreeNode } from './treeNode'; import { IControllerTreeChangeHandler } from './controllerTreeChangeHandler'; -import { AddControllerNode } from './addControllerTreeNode'; +import { AddControllerNode } from './addControllerNode'; import { ControllerRootNode, ControllerNode } from './controllerTreeNode'; import { IEndPoint } from '../controller/clusterControllerApi'; import { showErrorMessage } from '../utils'; +import { LoadingControllerNode } from './loadingControllerNode'; const CredentialNamespace = 'clusterControllerCredentials'; @@ -32,7 +33,6 @@ export class ControllerTreeDataProvider implements vscode.TreeDataProvider { @@ -42,15 +42,20 @@ export class ControllerTreeDataProvider implements vscode.TreeDataProvider { return element.getTreeItem(); } + public notifyNodeChanged(node?: TreeNode): void { + this._onDidChangeTreeData.fire(node); + } + public addController( url: string, username: string, @@ -58,6 +63,7 @@ export class ControllerTreeDataProvider implements vscode.TreeDataProvider { + private removePlaceholderNodes(): void { + let nodes = this.root.children; + if (nodes.length > 0) { + for (let i = 0; i < nodes.length; ++i) { + if (nodes[i] instanceof AddControllerNode || + nodes[i] instanceof LoadingControllerNode + ) { + nodes.splice(i--, 1); + } + } + } + } + + private removeDefectiveControllerNodes(): void { + let nodes = this.root.children; + if (nodes.length > 0) { + for (let i = 0; i < nodes.length; ++i) { + if (nodes[i] instanceof ControllerNode) { + let controller = nodes[i] as ControllerNode; + if (!controller.url || !controller.id) { + nodes.splice(i--, 1); + } + } + } + } + } + + private async loadSavedControllers(): Promise { + this.root.clearChildren(); let controllers: IControllerInfoSlim[] = this.memento.get('controllers'); if (controllers) { - this.root.clearChildren(); for (let c of controllers) { let password = undefined; if (c.rememberPassword) { @@ -88,8 +122,14 @@ export class ControllerTreeDataProvider implements vscode.TreeDataProvider { diff --git a/extensions/big-data-cluster/src/bigDataCluster/tree/loadingControllerNode.ts b/extensions/big-data-cluster/src/bigDataCluster/tree/loadingControllerNode.ts new file mode 100644 index 0000000000..bfdce7077b --- /dev/null +++ b/extensions/big-data-cluster/src/bigDataCluster/tree/loadingControllerNode.ts @@ -0,0 +1,47 @@ +/*--------------------------------------------------------------------------------------------- + * 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 nls from 'vscode-nls'; +import * as azdata from 'azdata'; +import * as vscode from 'vscode'; +import { TreeNode } from './treeNode'; +import { BdcItemType } from '../constants'; + +const localize = nls.loadMessageBundle(); + +export class LoadingControllerNode extends TreeNode { + private readonly nodeType: string; + + constructor() { + super(localize('textLoadingWithDots', "Loading...")); + this.nodeType = BdcItemType.loadingController; + } + + public async getChildren(): Promise { + return []; + } + + public getTreeItem(): vscode.TreeItem { + let item = new vscode.TreeItem(this.label, vscode.TreeItemCollapsibleState.None); + item.contextValue = this.nodeType; + return item; + } + + public getNodeInfo(): azdata.NodeInfo { + return { + label: this.label, + isLeaf: this.isLeaf, + errorMessage: undefined, + metadata: undefined, + nodePath: this.nodePath, + nodeStatus: undefined, + nodeType: this.nodeType, + iconType: this.nodeType, + nodeSubType: undefined + }; + } +}