mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 10:58:30 -05:00
Fix issues in file browser service (#469)
* fix file browser service bug * modify filebrowser service * change filebrowser contract * fix contract * fix file browser add/expand event contracts * remove commented code
This commit is contained in:
@@ -9,8 +9,13 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event params for expanding a node
|
/// Event params for expanding a node
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class FileBrowserExpandCompleteParams
|
public class FileBrowserExpandedParams
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Connection uri
|
||||||
|
/// </summary>
|
||||||
|
public string OwnerUri;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Expanded node
|
/// Expanded node
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -30,11 +35,11 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Notification for expand completion
|
/// Notification for expand completion
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class FileBrowserExpandCompleteNotification
|
public class FileBrowserExpandedNotification
|
||||||
{
|
{
|
||||||
public static readonly
|
public static readonly
|
||||||
EventType<FileBrowserExpandCompleteParams> Type =
|
EventType<FileBrowserExpandedParams> Type =
|
||||||
EventType<FileBrowserExpandCompleteParams>.Create("filebrowser/expandcomplete");
|
EventType<FileBrowserExpandedParams>.Create("filebrowser/expandcomplete");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,8 +11,13 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
/// Event params for opening a file browser
|
/// Event params for opening a file browser
|
||||||
/// Returns full directory structure on the server side
|
/// Returns full directory structure on the server side
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class FileBrowserOpenCompleteParams
|
public class FileBrowserOpenedParams
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Connection uri
|
||||||
|
/// </summary>
|
||||||
|
public string OwnerUri;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Entire file/folder tree
|
/// Entire file/folder tree
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -32,11 +37,11 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Notification for completing file browser opening
|
/// Notification for completing file browser opening
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class FileBrowserOpenCompleteNotification
|
public class FileBrowserOpenedNotification
|
||||||
{
|
{
|
||||||
public static readonly
|
public static readonly
|
||||||
EventType<FileBrowserOpenCompleteParams> Type =
|
EventType<FileBrowserOpenedParams> Type =
|
||||||
EventType<FileBrowserOpenCompleteParams>.Create("filebrowser/opencomplete");
|
EventType<FileBrowserOpenedParams>.Create("filebrowser/opencomplete");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event params for validation completion
|
/// Event params for validation completion
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class FileBrowserValidateCompleteParams
|
public class FileBrowserValidatedParams
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Result of the operation
|
/// Result of the operation
|
||||||
@@ -25,11 +25,11 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Notification for validation completion
|
/// Notification for validation completion
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class FileBrowserValidateCompleteNotification
|
public class FileBrowserValidatedNotification
|
||||||
{
|
{
|
||||||
public static readonly
|
public static readonly
|
||||||
EventType<FileBrowserValidateCompleteParams> Type =
|
EventType<FileBrowserValidatedParams> Type =
|
||||||
EventType<FileBrowserValidateCompleteParams>.Create("filebrowser/validatecomplete");
|
EventType<FileBrowserValidatedParams>.Create("filebrowser/validatecomplete");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -20,11 +20,6 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
this.Children = new List<FileTreeNode>();
|
this.Children = new List<FileTreeNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parent node
|
|
||||||
/// </summary>
|
|
||||||
public FileTreeNode Parent { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// List of children nodes
|
/// List of children nodes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -48,7 +43,6 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
|
|||||||
|
|
||||||
public void AddChildNode(FileTreeNode item)
|
public void AddChildNode(FileTreeNode item)
|
||||||
{
|
{
|
||||||
item.Parent = this;
|
|
||||||
this.Children.Add(item);
|
this.Children.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
|
|||||||
|
|
||||||
internal async Task RunFileBrowserOpenTask(FileBrowserOpenParams fileBrowserParams)
|
internal async Task RunFileBrowserOpenTask(FileBrowserOpenParams fileBrowserParams)
|
||||||
{
|
{
|
||||||
FileBrowserOpenCompleteParams result = new FileBrowserOpenCompleteParams();
|
FileBrowserOpenedParams result = new FileBrowserOpenedParams();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -197,7 +197,14 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
|
|||||||
{
|
{
|
||||||
FileBrowserOperation browser = new FileBrowserOperation(conn, fileBrowserParams.ExpandPath, fileBrowserParams.FileFilters);
|
FileBrowserOperation browser = new FileBrowserOperation(conn, fileBrowserParams.ExpandPath, fileBrowserParams.FileFilters);
|
||||||
browser.PopulateFileTree();
|
browser.PopulateFileTree();
|
||||||
|
|
||||||
|
if (this.ownerToFileBrowserMap.ContainsKey(fileBrowserParams.OwnerUri))
|
||||||
|
{
|
||||||
|
this.ownerToFileBrowserMap.Remove(fileBrowserParams.OwnerUri);
|
||||||
|
}
|
||||||
this.ownerToFileBrowserMap.Add(fileBrowserParams.OwnerUri, browser);
|
this.ownerToFileBrowserMap.Add(fileBrowserParams.OwnerUri, browser);
|
||||||
|
|
||||||
|
result.OwnerUri = fileBrowserParams.OwnerUri;
|
||||||
result.FileTree = browser.FileTree;
|
result.FileTree = browser.FileTree;
|
||||||
result.Succeeded = true;
|
result.Succeeded = true;
|
||||||
}
|
}
|
||||||
@@ -212,18 +219,19 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
|
|||||||
result.Message = ex.Message;
|
result.Message = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
await ServiceHost.SendEvent(FileBrowserOpenCompleteNotification.Type, result);
|
await ServiceHost.SendEvent(FileBrowserOpenedNotification.Type, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task RunFileBrowserExpandTask(FileBrowserExpandParams fileBrowserParams)
|
internal async Task RunFileBrowserExpandTask(FileBrowserExpandParams fileBrowserParams)
|
||||||
{
|
{
|
||||||
FileBrowserExpandCompleteParams result = new FileBrowserExpandCompleteParams();
|
FileBrowserExpandedParams result = new FileBrowserExpandedParams();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (this.ownerToFileBrowserMap.ContainsKey(fileBrowserParams.OwnerUri))
|
if (this.ownerToFileBrowserMap.ContainsKey(fileBrowserParams.OwnerUri))
|
||||||
{
|
{
|
||||||
FileBrowserOperation browser = this.ownerToFileBrowserMap[fileBrowserParams.OwnerUri];
|
FileBrowserOperation browser = this.ownerToFileBrowserMap[fileBrowserParams.OwnerUri];
|
||||||
browser.ExpandSelectedNode(fileBrowserParams.ExpandPath);
|
browser.ExpandSelectedNode(fileBrowserParams.ExpandPath);
|
||||||
|
result.OwnerUri = fileBrowserParams.OwnerUri;
|
||||||
result.ExpandedNode = browser.FileTree.SelectedNode;
|
result.ExpandedNode = browser.FileTree.SelectedNode;
|
||||||
result.Succeeded = true;
|
result.Succeeded = true;
|
||||||
}
|
}
|
||||||
@@ -238,12 +246,12 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
|
|||||||
result.Message = ex.Message;
|
result.Message = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
await ServiceHost.SendEvent(FileBrowserExpandCompleteNotification.Type, result);
|
await ServiceHost.SendEvent(FileBrowserExpandedNotification.Type, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task RunFileBrowserValidateTask(FileBrowserValidateParams fileBrowserParams)
|
internal async Task RunFileBrowserValidateTask(FileBrowserValidateParams fileBrowserParams)
|
||||||
{
|
{
|
||||||
FileBrowserValidateCompleteParams result = new FileBrowserValidateCompleteParams();
|
FileBrowserValidatedParams result = new FileBrowserValidatedParams();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -276,7 +284,7 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
|
|||||||
result.Message = ex.Message;
|
result.Message = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
await ServiceHost.SendEvent(FileBrowserValidateCompleteNotification.Type, result);
|
await ServiceHost.SendEvent(FileBrowserValidatedNotification.Type, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,6 +12,7 @@ using Microsoft.SqlTools.ServiceLayer.Admin;
|
|||||||
using Microsoft.SqlTools.ServiceLayer.Connection;
|
using Microsoft.SqlTools.ServiceLayer.Connection;
|
||||||
using Microsoft.SqlTools.ServiceLayer.DisasterRecovery;
|
using Microsoft.SqlTools.ServiceLayer.DisasterRecovery;
|
||||||
using Microsoft.SqlTools.ServiceLayer.EditData;
|
using Microsoft.SqlTools.ServiceLayer.EditData;
|
||||||
|
using Microsoft.SqlTools.ServiceLayer.FileBrowser;
|
||||||
using Microsoft.SqlTools.ServiceLayer.Hosting;
|
using Microsoft.SqlTools.ServiceLayer.Hosting;
|
||||||
using Microsoft.SqlTools.ServiceLayer.LanguageServices;
|
using Microsoft.SqlTools.ServiceLayer.LanguageServices;
|
||||||
using Microsoft.SqlTools.ServiceLayer.Metadata;
|
using Microsoft.SqlTools.ServiceLayer.Metadata;
|
||||||
@@ -95,8 +96,11 @@ namespace Microsoft.SqlTools.ServiceLayer
|
|||||||
DisasterRecoveryService.Instance.InitializeService(serviceHost);
|
DisasterRecoveryService.Instance.InitializeService(serviceHost);
|
||||||
serviceProvider.RegisterSingleService(DisasterRecoveryService.Instance);
|
serviceProvider.RegisterSingleService(DisasterRecoveryService.Instance);
|
||||||
|
|
||||||
|
FileBrowserService.Instance.InitializeService(serviceHost);
|
||||||
|
serviceProvider.RegisterSingleService(FileBrowserService.Instance);
|
||||||
|
|
||||||
ProfilerService.Instance.InitializeService(serviceHost);
|
ProfilerService.Instance.InitializeService(serviceHost);
|
||||||
serviceProvider.RegisterSingleService(ProfilerService.Instance);
|
serviceProvider.RegisterSingleService(ProfilerService.Instance);
|
||||||
|
|
||||||
InitializeHostedServices(serviceProvider, serviceHost);
|
InitializeHostedServices(serviceProvider, serviceHost);
|
||||||
serviceHost.ServiceProvider = serviceProvider;
|
serviceHost.ServiceProvider = serviceProvider;
|
||||||
|
|||||||
@@ -265,8 +265,8 @@ CREATE CERTIFICATE {1} WITH SUBJECT = 'Backup Encryption Certificate'; ";
|
|||||||
await service.RunFileBrowserOpenTask(openParams);
|
await service.RunFileBrowserOpenTask(openParams);
|
||||||
|
|
||||||
// Verify complete notification event was fired and the result
|
// Verify complete notification event was fired and the result
|
||||||
serviceHostMock.Verify(x => x.SendEvent(FileBrowserOpenCompleteNotification.Type,
|
serviceHostMock.Verify(x => x.SendEvent(FileBrowserOpenedNotification.Type,
|
||||||
It.Is<FileBrowserOpenCompleteParams>(p => p.Succeeded == true
|
It.Is<FileBrowserOpenedParams>(p => p.Succeeded == true
|
||||||
&& p.FileTree != null
|
&& p.FileTree != null
|
||||||
&& p.FileTree.RootNode != null
|
&& p.FileTree.RootNode != null
|
||||||
&& p.FileTree.RootNode.Children != null
|
&& p.FileTree.RootNode.Children != null
|
||||||
@@ -286,9 +286,11 @@ CREATE CERTIFICATE {1} WITH SUBJECT = 'Backup Encryption Certificate'; ";
|
|||||||
await service.RunFileBrowserExpandTask(expandParams);
|
await service.RunFileBrowserExpandTask(expandParams);
|
||||||
|
|
||||||
// Verify result
|
// Verify result
|
||||||
serviceHostMock.Verify(x => x.SendEvent(FileBrowserExpandCompleteNotification.Type,
|
serviceHostMock.Verify(x => x.SendEvent(FileBrowserExpandedNotification.Type,
|
||||||
It.Is<FileBrowserExpandCompleteParams>(p => p.Succeeded == true
|
It.Is<FileBrowserExpandedParams>(p => p.Succeeded == true
|
||||||
&& p.ExpandedNode.FullPath == backupConfigInfo.DefaultBackupFolder)),
|
&& p.ExpandedNode != null
|
||||||
|
&& p.ExpandedNode.Children != null
|
||||||
|
&& p.ExpandedNode.Children.Count > 0)),
|
||||||
Times.Once());
|
Times.Once());
|
||||||
|
|
||||||
var validateParams = new FileBrowserValidateParams
|
var validateParams = new FileBrowserValidateParams
|
||||||
@@ -302,7 +304,7 @@ CREATE CERTIFICATE {1} WITH SUBJECT = 'Backup Encryption Certificate'; ";
|
|||||||
await service.RunFileBrowserValidateTask(validateParams);
|
await service.RunFileBrowserValidateTask(validateParams);
|
||||||
|
|
||||||
// Verify complete notification event was fired and the result
|
// Verify complete notification event was fired and the result
|
||||||
serviceHostMock.Verify(x => x.SendEvent(FileBrowserValidateCompleteNotification.Type, It.Is<FileBrowserValidateCompleteParams>(p => p.Succeeded == true)), Times.Once());
|
serviceHostMock.Verify(x => x.SendEvent(FileBrowserValidatedNotification.Type, It.Is<FileBrowserValidatedParams>(p => p.Succeeded == true)), Times.Once());
|
||||||
|
|
||||||
// Remove the backup file
|
// Remove the backup file
|
||||||
if (File.Exists(backupPath))
|
if (File.Exists(backupPath))
|
||||||
|
|||||||
@@ -115,8 +115,8 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.FileBrowser
|
|||||||
await service.RunFileBrowserOpenTask(openParams);
|
await service.RunFileBrowserOpenTask(openParams);
|
||||||
|
|
||||||
// Verify complete notification event was fired and the result
|
// Verify complete notification event was fired and the result
|
||||||
serviceHostMock.Verify(x => x.SendEvent(FileBrowserOpenCompleteNotification.Type,
|
serviceHostMock.Verify(x => x.SendEvent(FileBrowserOpenedNotification.Type,
|
||||||
It.Is<FileBrowserOpenCompleteParams>(p => p.Succeeded == true
|
It.Is<FileBrowserOpenedParams>(p => p.Succeeded == true
|
||||||
&& p.FileTree != null
|
&& p.FileTree != null
|
||||||
&& p.FileTree.RootNode != null
|
&& p.FileTree.RootNode != null
|
||||||
&& p.FileTree.RootNode.Children != null
|
&& p.FileTree.RootNode.Children != null
|
||||||
@@ -145,7 +145,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.FileBrowser
|
|||||||
await service.RunFileBrowserValidateTask(validateParams);
|
await service.RunFileBrowserValidateTask(validateParams);
|
||||||
|
|
||||||
// Verify complete notification event was fired and the result
|
// Verify complete notification event was fired and the result
|
||||||
serviceHostMock.Verify(x => x.SendEvent(FileBrowserValidateCompleteNotification.Type, It.Is<FileBrowserValidateCompleteParams>(p => p.Succeeded == true)), Times.Once());
|
serviceHostMock.Verify(x => x.SendEvent(FileBrowserValidatedNotification.Type, It.Is<FileBrowserValidatedParams>(p => p.Succeeded == true)), Times.Once());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -168,7 +168,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.FileBrowser
|
|||||||
await service.RunFileBrowserValidateTask(validateParams);
|
await service.RunFileBrowserValidateTask(validateParams);
|
||||||
|
|
||||||
// Verify complete notification event was fired and the result
|
// Verify complete notification event was fired and the result
|
||||||
serviceHostMock.Verify(x => x.SendEvent(FileBrowserValidateCompleteNotification.Type, It.Is<FileBrowserValidateCompleteParams>(p => p.Succeeded == false)), Times.Once());
|
serviceHostMock.Verify(x => x.SendEvent(FileBrowserValidatedNotification.Type, It.Is<FileBrowserValidatedParams>(p => p.Succeeded == false)), Times.Once());
|
||||||
}
|
}
|
||||||
|
|
||||||
#region private methods
|
#region private methods
|
||||||
|
|||||||
Reference in New Issue
Block a user