mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-30 01:25:38 -05:00
* Changed azdata to az in azcli extension and resource-deployment, and some arc. Removed user, pass, url from controller connect blade. Commented out tests. Ported over work from old branch. * Changed unit tests, all unit tests passing. Changed parameters to new ones, fixed some Controller Connect issues. * Connect data controller and create dc working. * Changed az back to azdata in necessary places in resource-deployment. * Changed notebook values and added namespace to some params. * Added some changes from PR to this branch * Changed azdata.ts to az.ts and changed subscription parameter * Brought over changes from azcli PR into this branch. * added endpoint, username, password to getIsPassword * Changed notebooks to use proper az params, hard coded in some values to verify it is working, removed some variableNames from package.json. * Changed -sc to --storage-class in notebook * Added namespace to SQL deploy, deleted dc create in api * Deleted more dc create code and uncommented findAz() with unfinished work on Do Not Ask Again. * Removed (preview) from extensions/arc and extensions/azcli excluding preview:true in package.json * Commented out install/update prompts until DoNotAskAgain is implemented * Fixed bugs: JSON Output errors are now being caught, --infrastructure now has a required UI component with dropdown options, config page loads properly, SQL create flags use full names instead of shortnames. * Adds validation to pg extensions and bug fixes (#16486) * Extensions * Server parameters * Change locaiton of postgres extensions, pr fixes * Change location of list * List spacing * Commented out Don't Ask Again prompt implementation. * Uncommented header of a test file. * Added Azure CLI arcdata extension to Prerequisites * Reverted package.json and yarn.lock * Took away casting of stderr and stdout in executeCommand. * Deleted override function for initializeFields in connectControllerDialog.ts * Removed fakeAzApi for testing and added back in (Preview) * Removed en-us from python notebook links. * Deleted azdata tool from tool tests in resource-deployment * Deleted another instance of azdata in tool test * Add back in azdata tooltype * Remove en-us * Replaced AzdataTool in typings * Reverting adding azdata tool back in * Changed Azdata to AzdataToolOld * Added back azdata tool type * Added AzdataToolOld to tool types * fix test Co-authored-by: Candice Ye <canye@microsoft.com> Co-authored-by: nasc17 <nasc@microsoft.com> Co-authored-by: nasc17 <69922333+nasc17@users.noreply.github.com> Co-authored-by: chgagnon <chgagnon@microsoft.com>
125 lines
4.6 KiB
TypeScript
125 lines
4.6 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { ControllerInfo } from 'arc';
|
|
import * as vscode from 'vscode';
|
|
import { ControllerModel } from '../../models/controllerModel';
|
|
import { ControllerTreeNode } from './controllerTreeNode';
|
|
import { TreeNode } from './treeNode';
|
|
|
|
const mementoToken = 'arcDataControllers.v2';
|
|
|
|
/**
|
|
* The TreeDataProvider for the Azure Arc view, which displays a list of registered
|
|
* controllers and the resources under them.
|
|
*/
|
|
export class AzureArcTreeDataProvider implements vscode.TreeDataProvider<TreeNode> {
|
|
|
|
private _onDidChangeTreeData: vscode.EventEmitter<TreeNode | undefined> = new vscode.EventEmitter<TreeNode | undefined>();
|
|
readonly onDidChangeTreeData: vscode.Event<TreeNode | undefined> = this._onDidChangeTreeData.event;
|
|
|
|
private _loading: boolean = true;
|
|
|
|
private _controllerNodes: ControllerTreeNode[] = [];
|
|
|
|
constructor(private _context: vscode.ExtensionContext) {
|
|
this.loadSavedControllers().catch(err => console.log(`Error loading saved Arc controllers ${err}`));
|
|
}
|
|
|
|
public async getChildren(element?: TreeNode): Promise<TreeNode[]> {
|
|
if (this._loading) {
|
|
return [];
|
|
}
|
|
|
|
// We set the context here since VS Code takes a bit of time to process the _onDidChangeTreeData
|
|
// and so if we set it as soon as we finished loading the controllers it would briefly flash
|
|
// the "connect to controller" welcome view
|
|
await vscode.commands.executeCommand('setContext', 'arc.loaded', true);
|
|
|
|
if (element) {
|
|
return element.getChildren();
|
|
} else {
|
|
return this._controllerNodes;
|
|
}
|
|
}
|
|
|
|
public getTreeItem(element: TreeNode): TreeNode | Thenable<TreeNode> {
|
|
return element;
|
|
}
|
|
|
|
public async addOrUpdateController(model: ControllerModel, refreshTree = true): Promise<void> {
|
|
const controllerNode = this.getControllerNode(model);
|
|
if (controllerNode) {
|
|
controllerNode.model.info = model.info;
|
|
} else {
|
|
this._controllerNodes.push(new ControllerTreeNode(model, this._context, this));
|
|
}
|
|
if (refreshTree) {
|
|
this._onDidChangeTreeData.fire(undefined);
|
|
}
|
|
await this.saveControllers();
|
|
}
|
|
|
|
public getControllerNode(model: ControllerModel): ControllerTreeNode | undefined {
|
|
return this._controllerNodes.find(node => model.info.id === node.model.info.id);
|
|
}
|
|
|
|
public async removeController(controllerNode: ControllerTreeNode): Promise<void> {
|
|
this._controllerNodes = this._controllerNodes.filter(node => node !== controllerNode);
|
|
this._onDidChangeTreeData.fire(undefined);
|
|
await this.saveControllers();
|
|
}
|
|
|
|
/**
|
|
* Refreshes the specified node, or the entire tree if node is undefined
|
|
* @param node The node to refresh, or undefined for the whole tree
|
|
*/
|
|
public refreshNode(node: TreeNode | undefined): void {
|
|
this._onDidChangeTreeData.fire(node);
|
|
}
|
|
|
|
private async loadSavedControllers(): Promise<void> {
|
|
try {
|
|
const controllerMementos: ControllerInfo[] = this._context.globalState.get(mementoToken) || [];
|
|
this._controllerNodes = controllerMementos.map(memento => {
|
|
const controllerModel = new ControllerModel(this, memento);
|
|
return new ControllerTreeNode(controllerModel, this._context, this);
|
|
});
|
|
} finally {
|
|
this._loading = false;
|
|
this._onDidChangeTreeData.fire(undefined);
|
|
}
|
|
}
|
|
|
|
public async saveControllers(): Promise<void> {
|
|
const controllerInfo = this._controllerNodes.map(node => node.model.info);
|
|
await this._context.globalState.update(mementoToken, controllerInfo);
|
|
}
|
|
|
|
/**
|
|
* Opens the dashboard for the specified resource
|
|
* @param controllerModel The model for the controller containing the resource we want to open the dashboard for
|
|
* @param resourceType The resourceType for the resource
|
|
* @param name The name of the resource
|
|
*/
|
|
public async openResourceDashboard(controllerModel: ControllerModel, resourceType: string, name: string): Promise<void> {
|
|
const controllerNode = this._controllerNodes.find(n => n.model === controllerModel);
|
|
if (controllerNode) {
|
|
const resourceNode = controllerNode.getResourceNode(resourceType, name);
|
|
if (resourceNode) {
|
|
await resourceNode.openDashboard();
|
|
} else {
|
|
const errMsg = `Couldn't find resource node for ${name} (${resourceType})`;
|
|
console.log(errMsg);
|
|
throw new Error(errMsg);
|
|
}
|
|
} else {
|
|
const errMsg = 'Couldn\'t find controller node for opening dashboard';
|
|
console.log(errMsg);
|
|
throw new Error(errMsg);
|
|
}
|
|
}
|
|
}
|