diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs new file mode 100644 index 00000000..13152390 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol; +using Microsoft.SqlTools.ServiceLayer.Admin.Contracts; +using Microsoft.SqlTools.ServiceLayer.Hosting; +using Microsoft.SqlTools.ServiceLayer.SqlContext; +using System; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.Admin +{ + /// + /// Datasource admin task service class + /// + public class AdminService + { + private static readonly Lazy instance = new Lazy(() => new AdminService()); + + /// + /// Default, parameterless constructor. + /// + internal AdminService() + { + } + + /// + /// Gets the singleton instance object + /// + public static AdminService Instance + { + get { return instance.Value; } + } + + /// + /// Initializes the service instance + /// + public void InitializeService(ServiceHost serviceHost) + { + serviceHost.SetRequestHandler(CreateDatabaseRequest.Type, HandleCreateDatabaseRequest); + serviceHost.SetRequestHandler(CreateLoginRequest.Type, HandleCreateLoginRequest); + } + + /// + /// Handles a create database request + /// + internal static async Task HandleCreateDatabaseRequest( + CreateDatabaseParams databaseParams, + RequestContext requestContext) + { + await requestContext.SendResult(new CreateDatabaseResponse()); + } + + /// + /// Handles a create login request + /// + internal static async Task HandleCreateLoginRequest( + CreateLoginParams loginParams, + RequestContext requestContext) + { + await requestContext.SendResult(new CreateLoginResponse()); + } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateDatabaseRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateDatabaseRequest.cs new file mode 100644 index 00000000..d223bc88 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateDatabaseRequest.cs @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts +{ + public class CreateDatabaseParams + { + public string OwnerUri { get; set; } + + public DatabaseInfo DatabaseInfo { get; set; } + } + + public class CreateDatabaseResponse + { + public bool Result { get; set; } + + public int TaskId { get; set; } + } + + public class CreateDatabaseRequest + { + public static readonly + RequestType Type = + RequestType.Create("admin/createdatabase"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateLoginRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateLoginRequest.cs new file mode 100644 index 00000000..49688b85 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateLoginRequest.cs @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; + +namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts +{ + public class CreateLoginParams + { + public string OwnerUri { get; set; } + + public LoginInfo DatabaseInfo { get; set; } + } + + public class CreateLoginResponse + { + public bool Result { get; set; } + + public int TaskId { get; set; } + } + + public class CreateLoginRequest + { + public static readonly + RequestType Type = + RequestType.Create("admin/createlogin"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/DatabaseInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/DatabaseInfo.cs new file mode 100644 index 00000000..8579f8f8 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/DatabaseInfo.cs @@ -0,0 +1,12 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts +{ + public class DatabaseInfo + { + public string Name { get; set; } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/LoginInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/LoginInfo.cs new file mode 100644 index 00000000..6ac62d77 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/LoginInfo.cs @@ -0,0 +1,12 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts +{ + public class LoginInfo + { + public string Name { get; set; } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupInfo.cs new file mode 100644 index 00000000..d54009c8 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupInfo.cs @@ -0,0 +1,12 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts +{ + public class BackupInfo + { + public string BackupType { get; set; } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupRequest.cs new file mode 100644 index 00000000..981bce84 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupRequest.cs @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; + +namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts +{ + public class BackupParams + { + public string OwnerUri { get; set; } + + public BackupInfo BackupInfo { get; set; } + } + + public class BackupResponse + { + public bool Result { get; set; } + + public int TaskId { get; set; } + } + + public class BackupRequest + { + public static readonly + RequestType Type = + RequestType.Create("disasterrecovery/backup"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/DisasterRecoveryService.cs b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/DisasterRecoveryService.cs new file mode 100644 index 00000000..7b070272 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/DisasterRecoveryService.cs @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol; +using Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts; +using Microsoft.SqlTools.ServiceLayer.Hosting; +using Microsoft.SqlTools.ServiceLayer.SqlContext; +using System; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery +{ + public class DisasterRecoveryService + { + private static readonly Lazy instance = new Lazy(() => new DisasterRecoveryService()); + + /// + /// Default, parameterless constructor. + /// + internal DisasterRecoveryService() + { + } + + /// + /// Gets the singleton instance object + /// + public static DisasterRecoveryService Instance + { + get { return instance.Value; } + } + + /// + /// Initializes the service instance + /// + public void InitializeService(ServiceHost serviceHost ) + { + serviceHost.SetRequestHandler(BackupRequest.Type, HandleBackupRequest); + } + + /// + /// Handles a backup request + /// + internal static async Task HandleBackupRequest( + BackupParams backupParams, + RequestContext requestContext) + { + await requestContext.SendResult(new BackupResponse()); + } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs index a69eec00..49325883 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs @@ -6,12 +6,14 @@ using Microsoft.SqlTools.Credentials; using Microsoft.SqlTools.Extensibility; using Microsoft.SqlTools.Hosting; using Microsoft.SqlTools.Hosting.Protocol; +using Microsoft.SqlTools.ServiceLayer.Admin; using Microsoft.SqlTools.ServiceLayer.Connection; +using Microsoft.SqlTools.ServiceLayer.DisasterRecovery; using Microsoft.SqlTools.ServiceLayer.EditData; using Microsoft.SqlTools.ServiceLayer.Hosting; using Microsoft.SqlTools.ServiceLayer.LanguageServices; using Microsoft.SqlTools.ServiceLayer.Metadata; -using Microsoft.SqlTools.ServiceLayer.ObjectExplorer; +using Microsoft.SqlTools.ServiceLayer.ObjectExplorer; using Microsoft.SqlTools.ServiceLayer.QueryExecution; using Microsoft.SqlTools.ServiceLayer.Scripting; using Microsoft.SqlTools.ServiceLayer.SqlContext; @@ -85,6 +87,12 @@ namespace Microsoft.SqlTools.ServiceLayer ScriptingService.Instance.InitializeService(serviceHost); serviceProvider.RegisterSingleService(ScriptingService.Instance); + AdminService.Instance.InitializeService(serviceHost); + serviceProvider.RegisterSingleService(AdminService.Instance); + + DisasterRecoveryService.Instance.InitializeService(serviceHost); + serviceProvider.RegisterSingleService(DisasterRecoveryService.Instance); + InitializeHostedServices(serviceProvider, serviceHost); serviceHost.ServiceProvider = serviceProvider; diff --git a/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/ListTasksRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/ListTasksRequest.cs new file mode 100644 index 00000000..5bcb0e07 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/ListTasksRequest.cs @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.TaskServices.Contracts +{ + + public class ListTasksParams + { + bool ListActiveTasksOnly { get; set; } + } + + public class ListTasksResponse + { + TaskInfo[] Tasks { get; set; } + } + + public class ListTasksRequest + { + public static readonly + RequestType Type = + RequestType.Create("tasks/listtasks"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/TaskInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/TaskInfo.cs new file mode 100644 index 00000000..47f2a59b --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/TaskInfo.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.TaskServices.Contracts +{ + public enum TaskState + { + NotStarted = 0, + Running = 1, + Complete = 2 + } + + public class TaskInfo + { + public int TaskId { get; set; } + + public TaskState State { get; set; } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/TaskServices/TaskService.cs b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/TaskService.cs new file mode 100644 index 00000000..a0156c20 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/TaskService.cs @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol; +using Microsoft.SqlTools.ServiceLayer.Hosting; +using Microsoft.SqlTools.ServiceLayer.SqlContext; +using Microsoft.SqlTools.ServiceLayer.TaskServices.Contracts; +using System; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.TaskServices +{ + public class TaskService + { + private static readonly Lazy instance = new Lazy(() => new TaskService()); + + /// + /// Default, parameterless constructor. + /// + internal TaskService() + { + } + + /// + /// Gets the singleton instance object + /// + public static TaskService Instance + { + get { return instance.Value; } + } + + /// + /// Initializes the service instance + /// + public void InitializeService(ServiceHost serviceHost, SqlToolsContext context) + { + serviceHost.SetRequestHandler(ListTasksRequest.Type, HandleListTasksRequest); + } + + /// + /// Handles a list tasks request + /// + internal static async Task HandleListTasksRequest( + ListTasksParams listTasksParams, + RequestContext requestContext) + { + await requestContext.SendResult(new ListTasksResponse()); + } + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateDatabaseTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateDatabaseTests.cs new file mode 100644 index 00000000..3cc64b49 --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateDatabaseTests.cs @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Admin +{ + public class CreateDatabaseTests + { + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateLoginTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateLoginTests.cs new file mode 100644 index 00000000..c4716a95 --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateLoginTests.cs @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Admin +{ + public class CreateLoginTests + { + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/DisasterRecovery/BackupTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/DisasterRecovery/BackupTests.cs new file mode 100644 index 00000000..dfc44e85 --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/DisasterRecovery/BackupTests.cs @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery +{ + public class BackupTests + { + } +}