diff --git a/client/Ntreev.Crema.Client.Development/Authenticator.cs b/client/Ntreev.Crema.Client.Development/Authenticator.cs deleted file mode 100644 index 546fb3d37..000000000 --- a/client/Ntreev.Crema.Client.Development/Authenticator.cs +++ /dev/null @@ -1,43 +0,0 @@ -//Released under the MIT License. -// -//Copyright (c) 2018 Ntreev Soft co., Ltd. -// -//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -//documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -//rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -//persons to whom the Software is furnished to do so, subject to the following conditions: -// -//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -//Software. -// -//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -//OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -using Ntreev.Crema.Services; -using Ntreev.Crema.ServiceModel; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Ntreev.Crema.Client.Framework; -using Ntreev.Library; - -namespace Ntreev.Crema.Client.Development -{ - [Export(typeof(IPlugin))] - [Export(typeof(Authenticator))] - class Authenticator : Framework.AuthenticatorAppBase - { - [ImportingConstructor] - public Authenticator(ICremaAppHost cremaAppHost) - : base(cremaAppHost) - { - - } - } -} diff --git a/client/Ntreev.Crema.Client.Development/AutobotMachine.cs b/client/Ntreev.Crema.Client.Development/AutobotMachine.cs deleted file mode 100644 index 8087bd8d1..000000000 --- a/client/Ntreev.Crema.Client.Development/AutobotMachine.cs +++ /dev/null @@ -1,132 +0,0 @@ -//Released under the MIT License. -// -//Copyright (c) 2018 Ntreev Soft co., Ltd. -// -//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -//documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -//rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -//persons to whom the Software is furnished to do so, subject to the following conditions: -// -//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -//Software. -// -//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -//OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -using Ntreev.Crema.Services; -using Ntreev.Crema.Services.Random; -using Ntreev.Crema.ServiceModel; -using Ntreev.Library.Random; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace Ntreev.Crema.Client.Development -{ - [Export(typeof(AutobotMachine))] - class AutobotMachine - { - private readonly ICremaHost cremaHost; - private readonly Authenticator authenticator; - private CancellationTokenSource tokenSource; - private Task task; - - [ImportingConstructor] - public AutobotMachine(ICremaHost cremaHost, Authenticator authenticator) - { - this.cremaHost = cremaHost; - this.authenticator = authenticator; - } - - public void Start() - { - this.tokenSource = new CancellationTokenSource(); - this.task = new Task(() => this.TestAll(this.cremaHost, this.tokenSource.Token)); - this.task.Start(); - this.OnStarted(EventArgs.Empty); - } - - public void Stop() - { - if (this.tokenSource == null) - return; - - this.tokenSource.Cancel(); - this.tokenSource = null; - - this.task.Wait(); - this.task = null; - - this.OnStopped(EventArgs.Empty); - } - - public bool IsProcessing - { - get { return this.task != null; } - } - - public event EventHandler Started; - - public event EventHandler Stopped; - - protected virtual void OnStarted(EventArgs e) - { - if (this.Started != null) - { - this.Started(this, e); - } - } - - protected virtual void OnStopped(EventArgs e) - { - if (this.Stopped != null) - { - this.Stopped(this, e); - } - } - - private void TestAll(ICremaHost cremaHost, CancellationToken token) - { - var authentication = (Authentication)this.authenticator; - - while (true) - { - if (token.IsCancellationRequested == true) - break; - - try - { - if (token.IsCancellationRequested == false) - { - cremaHost.RandomTask(authentication); - } - } - catch (PermissionDeniedException) - { - - } - catch (Exception e) - { - if (e.InnerException == null || e.InnerException is PermissionDeniedException == false) - throw e; - } - - try - { - //cremaHost.TableContentEditTest(authentication); - } - catch (PermissionDeniedException) - { - - } - } - } - } -} diff --git a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/BatchUserCreationViewModel.cs b/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/BatchUserCreationViewModel.cs deleted file mode 100644 index 40664b7a8..000000000 --- a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/BatchUserCreationViewModel.cs +++ /dev/null @@ -1,125 +0,0 @@ -//Released under the MIT License. -// -//Copyright (c) 2018 Ntreev Soft co., Ltd. -// -//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -//documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -//rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -//persons to whom the Software is furnished to do so, subject to the following conditions: -// -//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -//Software. -// -//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -//OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -using Ntreev.Crema.Services; -using Ntreev.Crema.ServiceModel; -using Ntreev.Library.Random; -using Ntreev.ModernUI.Framework; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Security; - -namespace Ntreev.Crema.Client.Development.Dialogs.ViewModels -{ - public class BatchUserCreationViewModel : ModalDialogBase - { - private readonly IUserCategory category; - private readonly Authenticator authenticator; - private int tryCount; - - public BatchUserCreationViewModel(IUserCategory category) - { - this.category = category; - this.authenticator = category.GetService(typeof(Authenticator)) as Authenticator; - this.tryCount = 10; - } - - public int TryCount - { - get { return this.tryCount; } - set - { - this.tryCount = value; - this.NotifyOfPropertyChange(nameof(this.TryCount)); - this.NotifyOfPropertyChange(nameof(this.CanCreate)); - } - } - - public async void Create() - { - try - { - this.BeginProgress(); - await this.category.Dispatcher.InvokeAsync(() => - { - for (var i = 0; i < this.TryCount; i++) - { - this.CreateUser(RandomUtility.NextEnum()); - } - }); - - this.TryClose(true); - } - catch (Exception e) - { - AppMessageBox.ShowError(e); - } - finally - { - this.EndProgress(); - } - } - - public bool CanCreate - { - get - { - return this.tryCount > 0; - } - } - - private void CreateUser(Authority authority) - { - var identifier = RandomUtility.NextIdentifier(); - - if (authority == Authority.Admin) - { - var newID = string.Format("Admin_{0}", identifier); - var newName = string.Format("관리자_{0}", identifier); - - this.category.AddNewUser(this.authenticator, newID, StringToSecureString("admin"), newName, Authority.Admin); - } - else if (authority == Authority.Member) - { - var newID = string.Format("Member_{0}", identifier); - var newName = string.Format("구성원_{0}", identifier); - - this.category.AddNewUser(this.authenticator, newID, StringToSecureString("member"), newName, Authority.Member); - } - else - { - var newID = string.Format("Guest_{0}", identifier); - var newName = string.Format("손님_{0}", identifier); - - this.category.AddNewUser(this.authenticator, newID, StringToSecureString("guest"), newName, Authority.Guest); - } - } - - public static SecureString StringToSecureString(string value) - { - var secureString = new SecureString(); - foreach (var item in value) - { - secureString.AppendChar(item); - } - return secureString; - } - } -} diff --git a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/ContentGeneratorViewModel.cs b/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/ContentGeneratorViewModel.cs deleted file mode 100644 index 8d4eb83a5..000000000 --- a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/ContentGeneratorViewModel.cs +++ /dev/null @@ -1,93 +0,0 @@ -//Released under the MIT License. -// -//Copyright (c) 2018 Ntreev Soft co., Ltd. -// -//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -//documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -//rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -//persons to whom the Software is furnished to do so, subject to the following conditions: -// -//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -//Software. -// -//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -//OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -using Ntreev.Crema.Services; -using Ntreev.ModernUI.Framework; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Ntreev.Library.Random; -using System.Threading; -using System.Threading.Tasks; -using Ntreev.Crema.Services.Random; -using Ntreev.Library.Linq; - -namespace Ntreev.Crema.Client.Development.Dialogs.ViewModels -{ - public class ContentGeneratorViewModel : ModalDialogBase - { - private readonly ITableContent content; - private readonly CancellationTokenSource tokenSource; - private readonly Authenticator authenticator; - - public ContentGeneratorViewModel(ITableContent content) - { - this.content = content; - this.authenticator = this.content.Table.GetService(typeof(Authenticator)) as Authenticator; - this.tokenSource = new CancellationTokenSource(); - this.Initialize(); - } - - public void Stop() - { - this.tokenSource.Cancel(); - this.NotifyOfPropertyChange(nameof(this.CanStop)); - } - - public bool CanStop - { - get - { - return this.tokenSource.IsCancellationRequested == false; - } - } - - private async void Initialize() - { - try - { - await this.content.Dispatcher.InvokeAsync(() => this.content.EnterEdit(this.authenticator)); - var contents = EnumerableUtility.Friends(content, content.Childs); - var errorCount = 0; - for (var i = 0; i < 10000; i++) - { - if (this.tokenSource.IsCancellationRequested == true) - break; - - try - { - await this.content.Dispatcher.InvokeAsync(() => contents.Random().EditRandom(this.authenticator)); - } - catch - { - errorCount++; - if (errorCount > 5) - break; - } - } - await this.content.Dispatcher.InvokeAsync(() => this.content.LeaveEdit(this.authenticator)); - } - catch (Exception e) - { - AppMessageBox.ShowError(e); - } - - this.TryClose(); - } - } -} diff --git a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/CremaCodeGenViewModel.cs b/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/CremaCodeGenViewModel.cs deleted file mode 100644 index f862bd44e..000000000 --- a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/CremaCodeGenViewModel.cs +++ /dev/null @@ -1,173 +0,0 @@ -//Released under the MIT License. -// -//Copyright (c) 2018 Ntreev Soft co., Ltd. -// -//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -//documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -//rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -//persons to whom the Software is furnished to do so, subject to the following conditions: -// -//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -//Software. -// -//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -//OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -using Microsoft.WindowsAPICodePack.Dialogs; -using Ntreev.Crema.Services; -using Ntreev.Crema.ServiceModel; -using Ntreev.ModernUI.Framework; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Ntreev.Library; - -namespace Ntreev.Crema.Client.Development.Dialogs.ViewModels -{ - public class CremaCodeGenViewModel : ModalDialogBase - { - private static readonly string generatorPath = new FileInfo(Path.Combine(AppInfo.StartupPath, "..\\cremacodegen\\cremacodegen.exe")).FullName; - private static readonly string[] languageTypes = new string[] { "c#", "TypeScript", "c++", }; - private readonly ICremaHost cremaHost; - //private readonly ICremaConfigService configs; - private readonly Dictionary languageArgs = new Dictionary(); - private string address; - private string outputPath; - private TagInfo tags = TagInfo.All; - private string languageType = languageTypes.First(); - private bool isCompilable; - - public CremaCodeGenViewModel(ICremaHost cremaHost) - { - this.cremaHost = cremaHost; - //this.configs = this.cremaHost.GetService(typeof(ICremaConfigService)) as ICremaConfigService; - this.DisplayName = "코드 생성하기"; - this.address = cremaHost.Address; - - if (this.cremaHost.Configs.TryParse(this.GetType(), "outputPath", out var outputPath) == true) - { - this.outputPath = outputPath; - } - if (this.cremaHost.Configs.TryParse(this.GetType(), "tags", out var tags) == true) - { - this.tags = tags; - } - if (this.cremaHost.Configs.TryParse(this.GetType(), "isCompilable", out var isCompilable) == true) - { - this.isCompilable = isCompilable; - } - if (this.cremaHost.Configs.TryParse(this.GetType(), "languageType", out var languageType) == true) - { - this.languageType = languageType; - } - } - - public void SelectPath() - { - var dialog = new CommonOpenFileDialog() { IsFolderPicker = true, }; - - if (dialog.ShowDialog() == CommonFileDialogResult.Ok) - { - this.OutputPath = dialog.FileName; - } - } - - public void Generate() - { - try - { - this.BeginProgress(); - var languageArg = this.languageType == "TypeScript" ? "ts" : this.languageType; - var args = string.Join(" ", this.address, "\"" + this.outputPath + "\"", languageArg, "/dl", this.tags); - - if(this.isCompilable == true) - args = string.Join(" ", args, "/c"); - - System.Diagnostics.Process.Start(generatorPath, args); - this.cremaHost.Configs[this.GetType(), "outputPath"] = this.outputPath; - this.cremaHost.Configs[this.GetType(), "tags"] = this.tags; - this.cremaHost.Configs[this.GetType(), "isCompilable"] = this.isCompilable; - this.cremaHost.Configs[this.GetType(), "languageType"] = this.languageType; - this.TryClose(true); - } - catch (Exception e) - { - AppMessageBox.ShowError(e); - } - finally - { - this.EndProgress(); - } - } - - public string OutputPath - { - get { return this.outputPath; } - set - { - this.outputPath = value; - this.NotifyOfPropertyChange(nameof(this.OutputPath)); - this.NotifyOfPropertyChange(nameof(this.CanGenerate)); - } - } - - public TagInfo Tags - { - get { return this.tags; } - set - { - this.tags = value; - this.NotifyOfPropertyChange(nameof(this.Tags)); - this.NotifyOfPropertyChange(nameof(this.CanGenerate)); - } - } - - public bool CanGenerate - { - get - { - if (string.IsNullOrEmpty(this.languageType) == true) - return false; - if (this.IsProgressing == true) - return false; - if (File.Exists(generatorPath) == false) - return false; - if (Directory.Exists(this.OutputPath) == false) - return false; - if (this.tags == TagInfo.Unused) - return false; - return string.IsNullOrEmpty(this.outputPath) == false; - } - } - - public bool IsCompilable - { - get { return this.isCompilable; } - set - { - this.isCompilable = value; - this.NotifyOfPropertyChange(nameof(this.IsCompilable)); - } - } - - public string LanguageType - { - get { return this.languageType; } - set - { - this.languageType = value; - this.NotifyOfPropertyChange(nameof(this.LanguageType)); - } - } - - public string[] LanguageTypes - { - get { return languageTypes; } - } - } -} diff --git a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/CremaMakerViewModel.cs b/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/CremaMakerViewModel.cs deleted file mode 100644 index 3a5854937..000000000 --- a/client/Ntreev.Crema.Client.Development/Dialogs/ViewModels/CremaMakerViewModel.cs +++ /dev/null @@ -1,126 +0,0 @@ -//Released under the MIT License. -// -//Copyright (c) 2018 Ntreev Soft co., Ltd. -// -//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -//documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -//rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -//persons to whom the Software is furnished to do so, subject to the following conditions: -// -//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -//Software. -// -//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -//OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -using Microsoft.WindowsAPICodePack.Dialogs; -using Ntreev.Crema.Services; -using Ntreev.Crema.ServiceModel; -using Ntreev.ModernUI.Framework; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Ntreev.Library; - -namespace Ntreev.Crema.Client.Development.Dialogs.ViewModels -{ - public class CremaMakerViewModel : ModalDialogBase - { - private static readonly string makerPath = new FileInfo(Path.Combine(AppInfo.StartupPath, "..\\cremamaker\\cremamaker.exe")).FullName; - private readonly ICremaHost cremaHost; - //private readonly ICremaConfigService configs; - private string address; - private string filename; - private TagInfo tags = TagInfo.All; - - public CremaMakerViewModel(ICremaHost cremaHost) - { - this.cremaHost = cremaHost; - //this.configs = this.cremaHost.GetService(typeof(ICremaConfigService)) as ICremaConfigService; - this.DisplayName = "바이너리 만들기"; - this.address = cremaHost.Address; - - if (this.cremaHost.Configs.TryParse(this.GetType(), "filename", out var filename) == true) - { - this.filename = filename; - } - if (this.cremaHost.Configs.TryParse(this.GetType(), "tags", out var tags) == true) - { - this.tags = tags; - } - } - - public void SelectFileName() - { - var dialog = new CommonSaveFileDialog(); - dialog.Filters.Add(new CommonFileDialogFilter("crema data", "*.dat")); - - if (dialog.ShowDialog() == CommonFileDialogResult.Ok) - { - this.FileName = dialog.FileName; - } - } - - public void Make() - { - try - { - this.BeginProgress(); - var args = string.Join(" ", this.address, "\"" + this.filename + "\"", "/dl", this.tags); - System.Diagnostics.Process.Start(makerPath, args); - this.cremaHost.Configs[this.GetType(), "filename"] = this.filename; - this.cremaHost.Configs[this.GetType(), "tags"] = this.tags; - this.TryClose(true); - } - catch (Exception e) - { - AppMessageBox.ShowError(e); - } - finally - { - this.EndProgress(); - } - } - - public string FileName - { - get { return this.filename; } - set - { - this.filename = value; - this.NotifyOfPropertyChange(nameof(this.FileName)); - this.NotifyOfPropertyChange(nameof(this.CanMake)); - } - } - - public TagInfo Tags - { - get { return this.tags; } - set - { - this.tags = value; - this.NotifyOfPropertyChange(nameof(this.Tags)); - this.NotifyOfPropertyChange(nameof(this.CanMake)); - } - } - - public bool CanMake - { - get - { - if (this.IsProgressing == true) - return false; - if (File.Exists(makerPath) == false) - return false; - if (this.tags == TagInfo.Unused) - return false; - return string.IsNullOrEmpty(this.filename) == false; - } - } - } -} diff --git a/client/Ntreev.Crema.Client.Development/Dialogs/Views/BatchUserCreationView.xaml b/client/Ntreev.Crema.Client.Development/Dialogs/Views/BatchUserCreationView.xaml deleted file mode 100644 index 9b99aaab2..000000000 --- a/client/Ntreev.Crema.Client.Development/Dialogs/Views/BatchUserCreationView.xaml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - -