mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Added error node to OE tree (#3889)
* Add error node to OE tree * Add globalerror_red.svg for error node. * Fixed wrong import resolved automatically * Resolve PR comments
This commit is contained in:
@@ -52,7 +52,7 @@ export enum MssqlClusterItems {
|
|||||||
Connection = 'mssqlCluster:connection',
|
Connection = 'mssqlCluster:connection',
|
||||||
Folder = 'mssqlCluster:folder',
|
Folder = 'mssqlCluster:folder',
|
||||||
File = 'mssqlCluster:file',
|
File = 'mssqlCluster:file',
|
||||||
Message = 'mssqlCluster:message'
|
Error = 'mssqlCluster:error'
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum MssqlClusterItemsSubType {
|
export enum MssqlClusterItemsSubType {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ export class HdfsProvider implements vscode.TreeDataProvider<TreeNode>, ITreeCha
|
|||||||
if (element) {
|
if (element) {
|
||||||
return element.getChildren(false);
|
return element.getChildren(false);
|
||||||
} else {
|
} else {
|
||||||
return this.connections.length > 0 ? this.connections : [MessageNode.create(HdfsProvider.NoConnectionsMessage, element)];
|
return this.connections.length > 0 ? this.connections : [ErrorNode.create(HdfsProvider.NoConnectionsMessage, element)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ export class FolderNode extends HdfsFileSourceNode {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.children = [MessageNode.create(localize('errorExpanding', 'Error: {0}', utils.getErrorMessage(error)), this)];
|
this.children = [ErrorNode.create(localize('errorExpanding', 'Error: {0}', utils.getErrorMessage(error)), this)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.children;
|
return this.children;
|
||||||
@@ -313,7 +313,7 @@ export class FileNode extends HdfsFileSourceNode implements IFileNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MessageNode extends TreeNode {
|
export class ErrorNode extends TreeNode {
|
||||||
static messageNum: number = 0;
|
static messageNum: number = 0;
|
||||||
|
|
||||||
private _nodePathValue: string;
|
private _nodePathValue: string;
|
||||||
@@ -321,15 +321,15 @@ export class MessageNode extends TreeNode {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static create(message: string, parent: TreeNode): MessageNode {
|
public static create(message: string, parent: TreeNode): ErrorNode {
|
||||||
let node = new MessageNode(message);
|
let node = new ErrorNode(message);
|
||||||
node.parent = parent;
|
node.parent = parent;
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ensureNodePathValue(): void {
|
private ensureNodePathValue(): void {
|
||||||
if (!this._nodePathValue) {
|
if (!this._nodePathValue) {
|
||||||
this._nodePathValue = `message_${MessageNode.messageNum++}`;
|
this._nodePathValue = `message_${ErrorNode.messageNum++}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,7 +344,7 @@ export class MessageNode extends TreeNode {
|
|||||||
|
|
||||||
public getTreeItem(): vscode.TreeItem | Promise<vscode.TreeItem> {
|
public getTreeItem(): vscode.TreeItem | Promise<vscode.TreeItem> {
|
||||||
let item = new vscode.TreeItem(this.message, vscode.TreeItemCollapsibleState.None);
|
let item = new vscode.TreeItem(this.message, vscode.TreeItemCollapsibleState.None);
|
||||||
item.contextValue = Constants.MssqlClusterItems.Message;
|
item.contextValue = Constants.MssqlClusterItems.Error;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,7 +357,7 @@ export class MessageNode extends TreeNode {
|
|||||||
metadata: undefined,
|
metadata: undefined,
|
||||||
nodePath: this.generateNodePath(),
|
nodePath: this.generateNodePath(),
|
||||||
nodeStatus: undefined,
|
nodeStatus: undefined,
|
||||||
nodeType: Constants.MssqlClusterItems.Message,
|
nodeType: Constants.MssqlClusterItems.Error,
|
||||||
nodeSubType: undefined,
|
nodeSubType: undefined,
|
||||||
iconType: 'MessageType'
|
iconType: 'MessageType'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -139,6 +139,14 @@ export class MssqlObjectExplorerNodeProvider extends ProviderBase implements sql
|
|||||||
let children = await node.getChildren(true);
|
let children = await node.getChildren(true);
|
||||||
if (children) {
|
if (children) {
|
||||||
expandResult.nodes = children.map(c => c.getNodeInfo());
|
expandResult.nodes = children.map(c => c.getNodeInfo());
|
||||||
|
// There is only child returned when failure happens
|
||||||
|
if (children.length === 1) {
|
||||||
|
let child = children[0].getNodeInfo();
|
||||||
|
if (child && child.nodeType === constants.MssqlClusterItems.Error) {
|
||||||
|
expandResult.errorMessage = child.label;
|
||||||
|
expandResult.nodes = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -30,6 +30,12 @@
|
|||||||
background: url("database_inverse.svg") center center no-repeat;
|
background: url("database_inverse.svg") center center no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.vs .icon.error,
|
||||||
|
.vs-dark .icon.error,
|
||||||
|
.hc-black .icon.error {
|
||||||
|
background: url("globalerror_red.svg") center center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
.vs .icon.file {
|
.vs .icon.file {
|
||||||
background: url("file.svg") center center no-repeat;
|
background: url("file.svg") center center no-repeat;
|
||||||
}
|
}
|
||||||
|
|||||||
1
src/sql/media/icons/globalerror_red.svg
Normal file
1
src/sql/media/icons/globalerror_red.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.cls-1{fill:#d02e00;}</style></defs><title>globalerror_red</title><path class="cls-1" d="M8,0a7.92,7.92,0,0,1,4,1.09A8.15,8.15,0,0,1,14.91,4a8,8,0,0,1,.81,1.91,8,8,0,0,1-.81,6.16A8.15,8.15,0,0,1,12,14.92a8,8,0,0,1-8.07,0,8.15,8.15,0,0,1-2.87-2.87A8,8,0,0,1,1.09,4,8.15,8.15,0,0,1,4,1.11,7.92,7.92,0,0,1,8,0ZM8,15a6.88,6.88,0,0,0,1.86-.25,7,7,0,0,0,4.89-4.89,7.07,7.07,0,0,0,0-3.73A7,7,0,0,0,9.86,1.27a7.07,7.07,0,0,0-3.73,0A7,7,0,0,0,1.25,6.15a7.07,7.07,0,0,0,0,3.73,7,7,0,0,0,4.89,4.89A6.88,6.88,0,0,0,8,15Zm3.46-9.76L8.71,8l2.75,2.76-.7.7L8,8.73,5.24,11.48l-.7-.7L7.29,8,4.54,5.26l.7-.7L8,7.31l2.76-2.75Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 721 B |
@@ -375,7 +375,7 @@ export class ObjectExplorerService implements IObjectExplorerService {
|
|||||||
if (expandResult && expandResult.providerId) {
|
if (expandResult && expandResult.providerId) {
|
||||||
resultMap.set(expandResult.providerId, expandResult);
|
resultMap.set(expandResult.providerId, expandResult);
|
||||||
} else {
|
} else {
|
||||||
console.log('OE provider returns empty result or providerId');
|
error('OE provider returns empty result or providerId');
|
||||||
}
|
}
|
||||||
|
|
||||||
// When get all responses from all providers, merge results
|
// When get all responses from all providers, merge results
|
||||||
@@ -390,7 +390,6 @@ export class ObjectExplorerService implements IObjectExplorerService {
|
|||||||
});
|
});
|
||||||
if (newRequest) {
|
if (newRequest) {
|
||||||
allProviders.forEach(provider => {
|
allProviders.forEach(provider => {
|
||||||
TelemetryUtils.addTelemetry(this._telemetryService, TelemetryKeys.ObjectExplorerExpand, { refresh: 0, provider: providerId });
|
|
||||||
self.callExpandOrRefreshFromProvider(provider, {
|
self.callExpandOrRefreshFromProvider(provider, {
|
||||||
sessionId: session.sessionId,
|
sessionId: session.sessionId,
|
||||||
nodePath: nodePath
|
nodePath: nodePath
|
||||||
@@ -424,29 +423,36 @@ export class ObjectExplorerService implements IObjectExplorerService {
|
|||||||
nodePath: nodePath,
|
nodePath: nodePath,
|
||||||
label: 'Error',
|
label: 'Error',
|
||||||
errorMessage: '',
|
errorMessage: '',
|
||||||
nodeType: 'folder',
|
nodeType: 'error',
|
||||||
isLeaf: true,
|
isLeaf: true,
|
||||||
nodeSubType: '',
|
nodeSubType: '',
|
||||||
nodeStatus: '',
|
nodeStatus: '',
|
||||||
metadata: null
|
metadata: null
|
||||||
};
|
};
|
||||||
|
let errorMessages: string[] = [];
|
||||||
for (let provider of allProviders) {
|
for (let provider of allProviders) {
|
||||||
if (resultMap.has(provider.providerId)) {
|
if (resultMap.has(provider.providerId)) {
|
||||||
let result = resultMap.get(provider.providerId);
|
let result = resultMap.get(provider.providerId);
|
||||||
if (result) {
|
if (result) {
|
||||||
if (!result.errorMessage) {
|
if (!result.errorMessage) {
|
||||||
finalResult = result;
|
finalResult = result;
|
||||||
allNodes = allNodes.concat(result.nodes);
|
if (result.nodes !== undefined && result.nodes) {
|
||||||
|
allNodes = allNodes.concat(result.nodes);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
errorNode.errorMessage += provider.providerId + 'returns ' + result.errorMessage + ' ';
|
errorMessages.push(result.errorMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (finalResult) {
|
if (finalResult) {
|
||||||
if (errorNode.errorMessage && errorNode.errorMessage.length > 0) {
|
if (errorMessages.length > 0) {
|
||||||
allNodes = allNodes.concat([errorNode]);
|
if (errorMessages.length > 1) {
|
||||||
|
errorMessages.unshift(nls.localize('nodeExpansionError', 'Mulitiple errors:'));
|
||||||
|
}
|
||||||
|
errorNode.errorMessage = errorMessages.join('\n');
|
||||||
|
errorNode.label = errorNode.errorMessage;
|
||||||
|
allNodes = [errorNode].concat(allNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
finalResult.nodes = allNodes;
|
finalResult.nodes = allNodes;
|
||||||
|
|||||||
Reference in New Issue
Block a user