From 41b950b3f3f7fa0384cccd13ed4ef38119bbcbcf Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 15:52:25 +0200 Subject: Fixed ContinueThreadLoadingResponse. Refactored ActionLog Difference data structure to node tree. --- .../ViewModels/MainViewVM.cs | 19 +++++++++++++++++- .../ViewModels/MainViewVM.cs | 23 +++++++++++++++++++++- .../Tango.MachineStudio.UI/ViewModelLocator.cs | 2 +- 3 files changed, 41 insertions(+), 3 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs index 4d88a71d9..404a459d3 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs @@ -17,6 +17,10 @@ using Microsoft.Win32; using Tango.Core.Helpers; using System.IO; using Tango.MachineStudio.Catalogs.Excel; +using Tango.BL.ActionLogs; +using Tango.MachineStudio.Common.Authentication; +using Tango.BL.Enumerations; +using Tango.BL.DTO; namespace Tango.MachineStudio.Catalogs.ViewModels { @@ -25,6 +29,9 @@ namespace Tango.MachineStudio.Catalogs.ViewModels private ObservablesContext _catalogsContext; private ObservablesContext _activeCatalogContext; private INotificationProvider _notification; + private IActionLogManager _actionLogManager; + private IAuthenticationProvider _authentication; + private ColorCatalogDTO _catalogBeforeSave; #region Properties @@ -151,9 +158,11 @@ namespace Tango.MachineStudio.Catalogs.ViewModels /// Initializes a new instance of the class. /// /// The notification provider. - public MainViewVM(INotificationProvider notificationProvider) : this() + public MainViewVM(INotificationProvider notificationProvider, IActionLogManager actionLogManager, IAuthenticationProvider authenticationProvider) : this() { + _actionLogManager = actionLogManager; _notification = notificationProvider; + _authentication = authenticationProvider; } #endregion @@ -206,6 +215,8 @@ namespace Tango.MachineStudio.Catalogs.ViewModels SelectedItem = SelectedGroup.ColorCatalogsItems.FirstOrDefault(); } + _catalogBeforeSave = ColorCatalogDTO.FromObservable(ActiveCatalog); + View.NavigateTo(CatalogsNavigationView.CatalogView); } catch (Exception ex) @@ -233,6 +244,7 @@ namespace Tango.MachineStudio.Catalogs.ViewModels { IsFree = false; await SelectedCatalog.DeleteCascadeAsync(_catalogsContext); + _actionLogManager.InsertLog(ActionLogType.CatalogDeleted, _authentication.CurrentUser, SelectedCatalog.Name, SelectedCatalog, "Catalog deleted using Machine Studio."); SelectedCatalog = null; } catch (Exception ex) @@ -265,6 +277,7 @@ namespace Tango.MachineStudio.Catalogs.ViewModels newCatalog.Company = "Twine"; _catalogsContext.ColorCatalogs.Add(newCatalog); await _catalogsContext.SaveChangesAsync(); + _actionLogManager.InsertLog(ActionLogType.CatalogCreated, _authentication.CurrentUser, newCatalog.Name, newCatalog, "Catalog created using Machine Studio."); SelectedCatalog = newCatalog; EditSelectedCatalog(); } @@ -308,6 +321,10 @@ namespace Tango.MachineStudio.Catalogs.ViewModels ActiveCatalog.LastUpdated = DateTime.UtcNow; await _activeCatalogContext.SaveChangesAsync(); await LoadCatalogs(); + + var activeCatalogDTO = ColorCatalogDTO.FromObservable(ActiveCatalog); + _actionLogManager.InsertLog(ActionLogType.CatalogSaved, _authentication.CurrentUser, ActiveCatalog.Name, _catalogBeforeSave, activeCatalogDTO, "Catalog created using Machine Studio."); + _catalogBeforeSave = activeCatalogDTO; _notification.ShowInfo("Catalog updated successfully."); } catch (Exception ex) diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs index d598e2458..4b276462e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs @@ -1928,7 +1928,7 @@ namespace Tango.MachineStudio.Developer.ViewModels _activeJobDbContext.SaveChanges(); var afterJobDTO = JobDTO.FromObservable(ActiveJob); - _actionLogManager.InsertLog(ActionLogType.JobSaved, AuthenticationProvider.CurrentUser, _beforeSaveJobDTO.Name, _beforeSaveJobDTO, afterJobDTO, "Job saved from research module in Machine Studio.").GetAwaiter().GetResult(); + _actionLogManager.InsertLog(ActionLogType.JobSaved, AuthenticationProvider.CurrentUser, _beforeSaveJobDTO.Name, _beforeSaveJobDTO, afterJobDTO, "Job saved from research module in Machine Studio."); _beforeSaveJobDTO = afterJobDTO; _machineDbContext.Entry(SelectedMachineJob).Reload(); @@ -2191,6 +2191,8 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (_notification.ShowQuestion("Are you sure you want to delete the selected jobs?")) { + var jobsToReport = SelectedJobs.Select(x => JobDTO.FromObservable(x)).ToList(); + LogManager.Log(String.Format("Removing {0} jobs...", SelectedJobs.Count)); SelectedJobs.ToList().ForEach(x => { @@ -2202,6 +2204,11 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log("Saving selected machine to database..."); await SelectedMachine.SaveAsync(_machineDbContext); } + + foreach (var job in jobsToReport) + { + _actionLogManager.InsertLog(ActionLogType.JobDeleted, AuthenticationProvider.CurrentUser, job.Name, job, "Job deleted using Machine Studio.", true); + } } } } @@ -2258,6 +2265,7 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log("Saving selected machine to database..."); await SelectedMachine.SaveAsync(_machineDbContext); + _actionLogManager.InsertLog(ActionLogType.JobCreated, AuthenticationProvider.CurrentUser, newJob.Name, newJob, "Job created using Machine Studio."); SelectedMachineJob = newJob; LoadSelectedJob(); } @@ -2388,6 +2396,11 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log("Saving selected machine to database..."); await SelectedMachine.SaveAsync(_machineDbContext); + foreach (var job in SelectedJobs) + { + _actionLogManager.InsertLog(ActionLogType.JobCreated, AuthenticationProvider.CurrentUser, job.Name, job, "Job created using Machine Studio."); + } + CanWork = true; } } @@ -2611,6 +2624,8 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log($"Importing job files..."); + List jobsToReport = new List(); + foreach (var file in dlg.FileNames) { var bytes = File.ReadAllBytes(file); @@ -2619,10 +2634,16 @@ namespace Tango.MachineStudio.Developer.ViewModels job.JobSource = JobSource.Remote; _machineDbContext.Jobs.Add(job); + jobsToReport.Add(job); } await _machineDbContext.SaveChangesAsync(); + foreach (var job in jobsToReport) + { + _actionLogManager.InsertLog(ActionLogType.JobImported, AuthenticationProvider.CurrentUser, job.Name, job, "New job imported using Machine Studio."); + } + IsFree = true; _notification.ShowInfo($"Jobs imported successfully."); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index a61f14746..6c550ffda 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -95,7 +95,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); - TangoIOC.Default.Register(new DefaultActionLogManager() { ThrowExceptions = false }); + TangoIOC.Default.Register(); TangoIOC.Default.Register(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); -- cgit v1.3.1 From 68916b0c7e3322ff1ca8b45ed789973a23ccac51 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 19:55:31 +0200 Subject: Improved architecture of ActionLogs. --- .../ViewModels/MainViewVM.cs | 4 +- .../Tango.MachineStudio.UI/ViewModelLocator.cs | 2 +- .../Tango.BL/ActionLogs/BasicActionLogComparer.cs | 234 --------------------- .../ActionLogs/DefaultActionLogComparer.cs | 234 +++++++++++++++++++++ .../Tango.BL/ActionLogs/DefaultActionLogManager.cs | 74 +++++-- .../Tango.BL/ActionLogs/IActionLogComparable.cs | 20 -- .../Tango.BL/ActionLogs/IActionLogComparer.cs | 23 ++ .../Tango.BL/ActionLogs/IActionLogManager.cs | 10 + .../Visual_Studio/Tango.BL/ObservableEntity.cs | 26 +-- .../Visual_Studio/Tango.BL/ObservableEntityDTO.cs | 26 +-- Software/Visual_Studio/Tango.BL/Tango.BL.csproj | 9 +- 11 files changed, 337 insertions(+), 325 deletions(-) delete mode 100644 Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs create mode 100644 Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs create mode 100644 Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs (limited to 'Software/Visual_Studio/MachineStudio') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs index 404a459d3..ae763167b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs @@ -320,11 +320,13 @@ namespace Tango.MachineStudio.Catalogs.ViewModels IsFree = false; ActiveCatalog.LastUpdated = DateTime.UtcNow; await _activeCatalogContext.SaveChangesAsync(); - await LoadCatalogs(); var activeCatalogDTO = ColorCatalogDTO.FromObservable(ActiveCatalog); _actionLogManager.InsertLog(ActionLogType.CatalogSaved, _authentication.CurrentUser, ActiveCatalog.Name, _catalogBeforeSave, activeCatalogDTO, "Catalog created using Machine Studio."); _catalogBeforeSave = activeCatalogDTO; + + await LoadCatalogs(); + _notification.ShowInfo("Catalog updated successfully."); } catch (Exception ex) diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index 6c550ffda..9539037f1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -95,7 +95,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); - TangoIOC.Default.Register(); + TangoIOC.Default.Register(new DefaultActionLogManager() { IsAsync = true }); TangoIOC.Default.Register(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs deleted file mode 100644 index de07f6678..000000000 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.ValueObjects; - -namespace Tango.BL.ActionLogs -{ - /// - /// Represents a basic ActionLog comparison engine. - /// - public class BasicActionLogComparer - { - /// - /// Compares two instances of . - /// - /// The object before the change. - /// The object after the change. - /// - public Task Compare(IActionLogComparable before, IActionLogComparable after) - { - return Task.Factory.StartNew(() => - { - ActionLogDifference diff = new ActionLogDifference(); - diff.Name = GetComponentName(before, after); - - Compare(diff, before, after, null); - RemoveNoDifferences(diff); - - return diff; - }); - } - - #region Helpers - - private void Compare(ActionLogDifference diff, Object before, Object after, HashSet scannedObjects) - { - if (scannedObjects == null) - { - scannedObjects = new HashSet(); - } - - if (before == null && after == null) return; - - if (before != null) - { - if (scannedObjects.Contains(before)) return; - scannedObjects.Add(before); - } - - if (after != null) - { - if (scannedObjects.Contains(after)) return; - scannedObjects.Add(after); - } - - foreach (var prop in GetProperties(before, after).OrderByDescending(x => x.PropertyType.IsPrimitive || x.PropertyType.IsValueType || x.PropertyType == typeof(String))) - { - if (GetShouldIgnore(prop, before, after)) continue; - - if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) - { - object beforeValue = null; - object afterValue = null; - - if (before != null) - { - beforeValue = prop.GetValue(before); - } - - if (after != null) - { - afterValue = prop.GetValue(after); - } - - if (afterValue == null && beforeValue != null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); - if (afterValue != null && beforeValue == null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); - - if (afterValue != null && beforeValue != null) - { - if (!afterValue.Equals(beforeValue)) - { - AddValueDiff(diff, prop.Name, beforeValue, afterValue); - } - } - } - else if (!prop.PropertyType.IsGenericType) - { - object beforePropInstance = null; - object afterPropInstance = null; - - if (before != null) - { - beforePropInstance = prop.GetValue(before); - } - - if (after != null) - { - afterPropInstance = prop.GetValue(after); - } - - Compare(AddChildDiff(diff, prop.Name), beforePropInstance, afterPropInstance, scannedObjects); - } - else - { - IList beforeCollection = null; - IList afterCollection = null; - - if (before != null) - { - beforeCollection = prop.GetValue(before) as IList; - } - - if (after != null) - { - afterCollection = prop.GetValue(after) as IList; - } - - if (beforeCollection != null && afterCollection == null) - { - for (int i = 0; i < beforeCollection.Count; i++) - { - Compare(AddChildDiff(diff, GetActionLogName(beforeCollection[i], prop.Name)), beforeCollection[i], null, scannedObjects); - } - } - else if (beforeCollection == null && afterCollection != null) - { - for (int i = 0; i < afterCollection.Count; i++) - { - Compare(AddChildDiff(diff, GetActionLogName(afterCollection[i], prop.Name)), null, afterCollection[i], scannedObjects); - } - } - - if (beforeCollection != null && afterCollection != null) - { - for (int i = 0; i < Math.Max(beforeCollection.Count, afterCollection.Count); i++) - { - var beforeItem = i < beforeCollection.Count ? beforeCollection[i] : null; - var afterItem = i < afterCollection.Count ? afterCollection[i] : null; - Compare(AddChildDiff(diff, GetActionLogName(beforeItem, prop.Name)), beforeItem, afterItem, scannedObjects); - } - } - } - } - } - - private void AddValueDiff(ActionLogDifference diff, String property, object before, object after) - { - diff.Children.Add(new ActionLogDifferenceValue() - { - Name = property, - Before = before, - After = after - }); - } - - private ActionLogDifference AddChildDiff(ActionLogDifference diff, String property) - { - ActionLogDifference childDiff = new ActionLogDifference(); - childDiff.Name = property; - diff.Children.Add(childDiff); - return childDiff; - } - - private void RemoveNoDifferences(ActionLogDifference diff) - { - foreach (var child in diff.Children.ToList()) - { - if (!child.HasDifference) - { - diff.Children.Remove(child); - } - else - { - RemoveNoDifferences(child); - } - } - } - - private String GetComponentName(Object before, Object after) - { - var afterCast = after as IActionLogComparable; - var beforeCast = before as IActionLogComparable; - - var name = afterCast != null ? afterCast.GetActionLogName() : beforeCast.GetActionLogName(); - - return name; - } - - private String GetActionLogName(Object obj, String defaultName) - { - var objCast = obj as IActionLogComparable; - if (objCast != null) - { - return objCast.GetActionLogName(); - } - else - { - return defaultName; - } - } - - private PropertyInfo GetProperty(String name, Object before, Object after) - { - return after != null ? after.GetType().GetProperty(name) : before.GetType().GetProperty(name); - } - - private List GetProperties(BindingFlags flags, Object before, Object after) - { - return after != null ? after.GetType().GetProperties(flags).ToList() : before.GetType().GetProperties(flags).ToList(); - } - - private List GetProperties(Object before, Object after) - { - return after != null ? after.GetType().GetProperties().ToList() : before.GetType().GetProperties().ToList(); - } - - private bool GetShouldIgnore(PropertyInfo prop, Object before, Object after) - { - var beforeCast = before as IActionLogComparable; - var afterCast = after as IActionLogComparable; - - if (beforeCast != null) return beforeCast.ShouldActionLogIgnore(prop.Name); - if (afterCast != null) return afterCast.ShouldActionLogIgnore(prop.Name); - - return false; - } - - #endregion - } -} diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs new file mode 100644 index 000000000..542aba0e4 --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs @@ -0,0 +1,234 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.ValueObjects; + +namespace Tango.BL.ActionLogs +{ + /// + /// Represents the default implementation of . + /// + public class DefaultActionLogComparer : IActionLogComparer + { + /// + /// Compares the specified object before and after changes and returns the difference tree. + /// + /// The object before the change. + /// The object after the change. + /// + public Task Compare(IActionLogComparable before, IActionLogComparable after) + { + return Task.Factory.StartNew(() => + { + ActionLogDifference diff = new ActionLogDifference(); + diff.Name = GetComponentName(before, after); + + Compare(diff, before, after, null); + RemoveNoDifferences(diff); + + return diff; + }); + } + + #region Helpers + + private void Compare(ActionLogDifference diff, Object before, Object after, HashSet scannedObjects) + { + if (scannedObjects == null) + { + scannedObjects = new HashSet(); + } + + if (before == null && after == null) return; + + if (before != null) + { + if (scannedObjects.Contains(before)) return; + scannedObjects.Add(before); + } + + if (after != null) + { + if (scannedObjects.Contains(after)) return; + scannedObjects.Add(after); + } + + foreach (var prop in GetProperties(before, after).OrderByDescending(x => x.PropertyType.IsPrimitive || x.PropertyType.IsValueType || x.PropertyType == typeof(String))) + { + if (GetShouldIgnore(prop, before, after)) continue; + + if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) + { + object beforeValue = null; + object afterValue = null; + + if (before != null) + { + beforeValue = prop.GetValue(before); + } + + if (after != null) + { + afterValue = prop.GetValue(after); + } + + if (afterValue == null && beforeValue != null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); + if (afterValue != null && beforeValue == null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); + + if (afterValue != null && beforeValue != null) + { + if (!afterValue.Equals(beforeValue)) + { + AddValueDiff(diff, prop.Name, beforeValue, afterValue); + } + } + } + else if (!prop.PropertyType.IsGenericType) + { + object beforePropInstance = null; + object afterPropInstance = null; + + if (before != null) + { + beforePropInstance = prop.GetValue(before); + } + + if (after != null) + { + afterPropInstance = prop.GetValue(after); + } + + Compare(AddChildDiff(diff, prop.Name), beforePropInstance, afterPropInstance, scannedObjects); + } + else + { + IList beforeCollection = null; + IList afterCollection = null; + + if (before != null) + { + beforeCollection = prop.GetValue(before) as IList; + } + + if (after != null) + { + afterCollection = prop.GetValue(after) as IList; + } + + if (beforeCollection != null && afterCollection == null) + { + for (int i = 0; i < beforeCollection.Count; i++) + { + Compare(AddChildDiff(diff, GetActionLogName(beforeCollection[i], prop.Name)), beforeCollection[i], null, scannedObjects); + } + } + else if (beforeCollection == null && afterCollection != null) + { + for (int i = 0; i < afterCollection.Count; i++) + { + Compare(AddChildDiff(diff, GetActionLogName(afterCollection[i], prop.Name)), null, afterCollection[i], scannedObjects); + } + } + + if (beforeCollection != null && afterCollection != null) + { + for (int i = 0; i < Math.Max(beforeCollection.Count, afterCollection.Count); i++) + { + var beforeItem = i < beforeCollection.Count ? beforeCollection[i] : null; + var afterItem = i < afterCollection.Count ? afterCollection[i] : null; + Compare(AddChildDiff(diff, GetActionLogName(beforeItem, prop.Name)), beforeItem, afterItem, scannedObjects); + } + } + } + } + } + + private void AddValueDiff(ActionLogDifference diff, String property, object before, object after) + { + diff.Children.Add(new ActionLogDifferenceValue() + { + Name = property, + Before = before, + After = after + }); + } + + private ActionLogDifference AddChildDiff(ActionLogDifference diff, String property) + { + ActionLogDifference childDiff = new ActionLogDifference(); + childDiff.Name = property; + diff.Children.Add(childDiff); + return childDiff; + } + + private void RemoveNoDifferences(ActionLogDifference diff) + { + foreach (var child in diff.Children.ToList()) + { + if (!child.HasDifference) + { + diff.Children.Remove(child); + } + else + { + RemoveNoDifferences(child); + } + } + } + + private String GetComponentName(Object before, Object after) + { + var afterCast = after as IActionLogComparable; + var beforeCast = before as IActionLogComparable; + + var name = afterCast != null ? afterCast.GetActionLogName() : beforeCast.GetActionLogName(); + + return name; + } + + private String GetActionLogName(Object obj, String defaultName) + { + var objCast = obj as IActionLogComparable; + if (objCast != null) + { + return objCast.GetActionLogName(); + } + else + { + return defaultName; + } + } + + private PropertyInfo GetProperty(String name, Object before, Object after) + { + return after != null ? after.GetType().GetProperty(name) : before.GetType().GetProperty(name); + } + + private List GetProperties(BindingFlags flags, Object before, Object after) + { + return after != null ? after.GetType().GetProperties(flags).ToList() : before.GetType().GetProperties(flags).ToList(); + } + + private List GetProperties(Object before, Object after) + { + return after != null ? after.GetType().GetProperties().ToList() : before.GetType().GetProperties().ToList(); + } + + private bool GetShouldIgnore(PropertyInfo prop, Object before, Object after) + { + var beforeCast = before as IActionLogComparable; + var afterCast = after as IActionLogComparable; + + if (beforeCast != null) return beforeCast.ShouldActionLogIgnore(prop.Name); + if (afterCast != null) return afterCast.ShouldActionLogIgnore(prop.Name); + + return false; + } + + #endregion + } +} diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs index 9ffdcbc22..d95f4cd54 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.BL.Enumerations; @@ -19,6 +20,25 @@ namespace Tango.BL.ActionLogs /// public class DefaultActionLogManager : ExtendedObject, IActionLogManager { + /// + /// Gets or sets the action log comparer used to compare related objects. + /// + public IActionLogComparer ActionLogComparer { get; set; } + + /// + /// Gets or sets a value indicating whether to perform the logging operations asynchronously. + /// + public bool IsAsync { get; set; } + + /// + /// Initializes a new instance of the class. + /// + public DefaultActionLogManager() + { + IsAsync = true; + ActionLogComparer = new DefaultActionLogComparer(); + } + /// /// Inserts a new action log (main entry point). /// @@ -30,7 +50,7 @@ namespace Tango.BL.ActionLogs /// The message. public void InsertLog(ActionLogType type, string userGuid, string relatedObjectName, string relatedObjectGuid, ActionLogDifference difference, string message = null) { - Task.Factory.StartNew(() => + Task task = new Task(() => { using (ObservablesContext db = ObservablesContext.CreateDefault()) { @@ -62,6 +82,15 @@ namespace Tango.BL.ActionLogs } } }); + + if (IsAsync) + { + task.Start(); + } + else + { + task.RunSynchronously(); + } } /// @@ -75,28 +104,45 @@ namespace Tango.BL.ActionLogs /// The message. public void InsertLog(ActionLogType type, string userGuid, string relatedObjectName, IActionLogComparable relatedObjectBefore, IActionLogComparable relatedObjectAfter, string message = null) { - Task.Factory.StartNew(() => + Task task = new Task(() => { - ActionLogDifference diff = null; + ActionLogDifference diff = new ActionLogDifference(); - try + if (ActionLogComparer != null) { - diff = new BasicActionLogComparer().Compare(relatedObjectBefore, relatedObjectAfter).Result; - } - catch (Exception ex) - { - LogManager.Log(ex, $"Error while comparing for action log '{type}'."); - } + try + { + diff = ActionLogComparer.Compare(relatedObjectBefore, relatedObjectAfter).Result; + } + catch (Exception ex) + { + LogManager.Log(ex, $"Error while comparing for action log '{type}'."); + } - if (diff.Children.Count > 0) - { - InsertLog(type, userGuid, relatedObjectName, GetRelatedObjectGuid(relatedObjectBefore, relatedObjectAfter), diff, message); + if (diff.Children.Count > 0) + { + InsertLog(type, userGuid, relatedObjectName, GetRelatedObjectGuid(relatedObjectBefore, relatedObjectAfter), diff, message); + } + else + { + LogManager.Log($"Action log '{type}' was about to be inserted but skipped due to no differences."); + } } else { - LogManager.Log($"Action log '{type}' was about to be inserted but skipped due to no differences."); + Debug.WriteLine("No comparer defined for action log."); + InsertLog(type, userGuid, relatedObjectName, GetRelatedObjectGuid(relatedObjectBefore, relatedObjectAfter), diff, message); } }); + + if (IsAsync) + { + task.Start(); + } + else + { + task.RunSynchronously(); + } } /// diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs index b9416635f..255f5a407 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs @@ -17,13 +17,6 @@ namespace Tango.BL.ActionLogs /// String Guid { get; } - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// A tree of differences. - Task CompareTo(IActionLogComparable before); - /// /// Returns true if the specified property should be ignored during ActionLog comparison. /// @@ -37,17 +30,4 @@ namespace Tango.BL.ActionLogs /// String GetActionLogName(); } - - /// - /// Represents a type which is supported for ActionLog difference comparison. - /// - public interface IActionLogComparable : IActionLogComparable where T : class - { - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// A tree of differences. - Task CompareTo(T before); - } } diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs new file mode 100644 index 000000000..94db259b0 --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.ValueObjects; + +namespace Tango.BL.ActionLogs +{ + /// + /// Represents an comparer. + /// + public interface IActionLogComparer + { + /// + /// Compares the specified object before and after changes and returns the difference tree. + /// + /// The object before the change. + /// The object after the change. + /// + Task Compare(IActionLogComparable before, IActionLogComparable after); + } +} diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs index 150116c97..6fdca98a7 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs @@ -14,6 +14,16 @@ namespace Tango.BL.ActionLogs /// public interface IActionLogManager { + /// + /// Gets or sets the action log comparer used to compare related objects. + /// + IActionLogComparer ActionLogComparer { get; set; } + + /// + /// Gets or sets a value indicating whether to perform the logging operations asynchronously. + /// + bool IsAsync { get; set; } + /// /// Inserts a new action log (main entry point). /// diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs index 211450614..e3bba77bd 100644 --- a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs +++ b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs @@ -52,7 +52,7 @@ namespace Tango.BL /// /// [Serializable] - public abstract class ObservableEntity : ExtendedObject, IObservableEntity, IActionLogComparable where T : class, IObservableEntity + public abstract class ObservableEntity : ExtendedObject, IObservableEntity, IActionLogComparable where T : class, IObservableEntity { #region Events @@ -663,30 +663,6 @@ namespace Tango.BL #region Action Log - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - public Task CompareTo(T before) - { - return new BasicActionLogComparer().Compare(before as IActionLogComparable, this); - } - - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - Task IActionLogComparable.CompareTo(IActionLogComparable before) - { - return CompareTo(before as T); - } - /// /// Returns true if the specified property should be ignored during ActionLog comparison. /// diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs b/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs index 15ba1b24e..720d6b9b7 100644 --- a/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs +++ b/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs @@ -18,7 +18,7 @@ namespace Tango.BL /// /// /// - public abstract class ObservableEntityDTO : IObservableEntityDTO, IEquatable, IActionLogComparable where T : IObservableEntity where DTO : ObservableEntityDTO + public abstract class ObservableEntityDTO : IObservableEntityDTO, IEquatable, IActionLogComparable where T : IObservableEntity where DTO : ObservableEntityDTO { /// /// Gets or sets the ID of the entity. @@ -250,30 +250,6 @@ namespace Tango.BL return EqualsToObservable(observable); } - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - public Task CompareTo(DTO before) - { - return new BasicActionLogComparer().Compare(before, this); - } - - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - Task IActionLogComparable.CompareTo(IActionLogComparable before) - { - return CompareTo(before as DTO); - } - /// /// Returns true if the specified property should be ignored during ActionLog comparison. /// diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj index 2f9cf489e..f1bdf94ec 100644 --- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj +++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj @@ -84,9 +84,10 @@ GlobalVersionInfo.cs - + + @@ -578,9 +579,7 @@ Tango.Settings - - - + @@ -591,7 +590,7 @@ - + \ No newline at end of file -- cgit v1.3.1 From 44af6a05f13cff1defd8ef4a01c4ecdbd7833c33 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 21:05:38 +0200 Subject: Changed DTO's to include byte[] when generated but mapped by reference. More improvements to action logs. --- Software/DB/Tango.mdf | Bin 75497472 -> 75497472 bytes Software/DB/Tango_log.ldf | Bin 22675456 -> 22675456 bytes .../ViewModels/MainViewVM.cs | 142 +++++++++------- ...eStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj | 184 +++++++++++++++++++++ .../ActionLogs/DefaultActionLogComparer.cs | 2 +- .../Tango.BL/ActionLogs/DefaultActionLogManager.cs | 4 +- .../Tango.BL/ActionLogs/IActionLogManager.cs | 4 +- .../Builders/ActionLogsCollectionBuilder.cs | 26 +++ Software/Visual_Studio/Tango.BL/DTO/CatDTOBase.cs | 8 + Software/Visual_Studio/Tango.BL/DTO/CctDTO.cs | 5 +- Software/Visual_Studio/Tango.BL/DTO/CctDTOBase.cs | 8 + .../Tango.BL/DTO/ColorCatalogDTOBase.cs | 16 ++ .../Tango.BL/DTO/ColorSpaceDTOBase.cs | 8 + .../Visual_Studio/Tango.BL/DTO/DispenserDTOBase.cs | 8 + Software/Visual_Studio/Tango.BL/DTO/JobDTOBase.cs | 16 ++ .../Tango.BL/DTO/LiquidTypesRmlDTOBase.cs | 8 + .../Tango.BL/DTO/ProcessParametersTableDTO.cs | 5 +- .../DTO/ProcessParametersTablesGroupDTO.cs | 10 ++ Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs | 10 ++ Software/Visual_Studio/Tango.BL/DTO/RmlDTOBase.cs | 8 + .../Visual_Studio/Tango.BL/ObservableEntityDTO.cs | 6 +- Software/Visual_Studio/Tango.BL/Tango.BL.csproj | 1 + .../ObservablesGenerator.cs | 2 +- 23 files changed, 407 insertions(+), 74 deletions(-) create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj create mode 100644 Software/Visual_Studio/Tango.BL/Builders/ActionLogsCollectionBuilder.cs (limited to 'Software/Visual_Studio/MachineStudio') diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf index a4bdfc14b..2b528cbe0 100644 Binary files a/Software/DB/Tango.mdf and b/Software/DB/Tango.mdf differ diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf index 2fe319056..869e50d97 100644 Binary files a/Software/DB/Tango_log.ldf and b/Software/DB/Tango_log.ldf differ diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs index 4b276462e..bb8f117c3 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs @@ -1746,6 +1746,8 @@ namespace Tango.MachineStudio.Developer.ViewModels tables.Add(newTable); } + var rmlBeforeDTO = RmlDTO.FromObservable(SelectedRML); + group.Active = true; group.ProcessParametersTables = tables.ToSynchronizedObservableCollection(); group.Rml = SelectedRML; @@ -1760,6 +1762,8 @@ namespace Tango.MachineStudio.Developer.ViewModels SelectedRML.ProcessParametersTablesGroups.Add(group); await SelectedRML.SaveAsync(_activeJobDbContext); + _actionLogManager.InsertLog(ActionLogType.RmlSaved, AuthenticationProvider.CurrentUser, SelectedRML.Name, rmlBeforeDTO, RmlDTO.FromObservable(SelectedRML), "Active process parameters changed from Machine Studio Research module."); + InvalidateLiquidFactorsAndProcessTables(); } @@ -1804,98 +1808,110 @@ namespace Tango.MachineStudio.Developer.ViewModels using (_notification.PushTaskItem("Loading job details...")) { - await Task.Factory.StartNew(() => + try { - _disable_gamut_check = true; + await Task.Factory.StartNew(() => + { + _disable_gamut_check = true; - LogManager.Log(String.Format("Loading job {0}...", SelectedMachineJob.Name)); - SelectedSegments = new ObservableCollection(); - SelectedBrushStops = new ObservableCollection(); - SelectedRML = null; - SelectedSegment = null; - SelectedGroupHistory = null; - SelectedBrushStop = null; - SelectedProcessParametersTable = null; - RmlProcessParametersTableGroup = null; + LogManager.Log(String.Format("Loading job {0}...", SelectedMachineJob.Name)); + SelectedSegments = new ObservableCollection(); + SelectedBrushStops = new ObservableCollection(); + SelectedRML = null; + SelectedSegment = null; + SelectedGroupHistory = null; + SelectedBrushStop = null; + SelectedProcessParametersTable = null; + RmlProcessParametersTableGroup = null; - _blockInvalidateCommands = false; + _blockInvalidateCommands = false; - LogManager.Log("Creating active job DB context..."); - _activeJobDbContext = ObservablesContext.CreateDefault(); + LogManager.Log("Creating active job DB context..."); + _activeJobDbContext = ObservablesContext.CreateDefault(); - LogManager.Log("Initializing available color spaces, RMLs & Winding methods..."); + LogManager.Log("Initializing available color spaces, RMLs & Winding methods..."); - //var processParamsGroups = _activeJobDbContext.ProcessParametersTablesGroups.ToList(); - //var processParams = _activeJobDbContext.ProcessParametersTables.ToList(); + //var processParamsGroups = _activeJobDbContext.ProcessParametersTablesGroups.ToList(); + //var processParams = _activeJobDbContext.ProcessParametersTables.ToList(); - ColorSpaces = _activeJobDbContext.ColorSpaces.ToObservableCollection(); - Rmls = _activeJobDbContext.Rmls.ToObservableCollection(); - WindingMethods = _activeJobDbContext.WindingMethods.ToObservableCollection(); - SpoolTypes = _activeJobDbContext.SpoolTypes.ToObservableCollection(); + ColorSpaces = _activeJobDbContext.ColorSpaces.ToObservableCollection(); + Rmls = _activeJobDbContext.Rmls.ToObservableCollection(); + WindingMethods = _activeJobDbContext.WindingMethods.ToObservableCollection(); + SpoolTypes = _activeJobDbContext.SpoolTypes.ToObservableCollection(); - LogManager.Log("Loading machine spools..."); - _activeJobDbContext.Spools.Where(x => x.MachineGuid == SelectedMachine.Guid).Load(); + LogManager.Log("Loading machine spools..."); + _activeJobDbContext.Spools.Where(x => x.MachineGuid == SelectedMachine.Guid).Load(); - LogManager.Log("Setting active job..."); - ActiveJob = new JobBuilder(_activeJobDbContext).Set(SelectedMachineJob.Guid).WithUser().WithSegments().WithBrushStops().WithConfiguration().WithRML().Build(); + LogManager.Log("Setting active job..."); + ActiveJob = new JobBuilder(_activeJobDbContext).Set(SelectedMachineJob.Guid).WithUser().WithSegments().WithBrushStops().WithConfiguration().WithRML().Build(); - //_activeJobDbContext.Ccts.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); - //_activeJobDbContext.Cats.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); - //_activeJobDbContext.Machines.SingleOrDefault(x => x.Guid == ActiveJob.MachineGuid); - //_activeJobDbContext.Configurations.SingleOrDefault(x => x.Guid == ActiveJob.Machine.ConfigurationGuid); + //_activeJobDbContext.Ccts.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); + //_activeJobDbContext.Cats.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); + //_activeJobDbContext.Machines.SingleOrDefault(x => x.Guid == ActiveJob.MachineGuid); + //_activeJobDbContext.Configurations.SingleOrDefault(x => x.Guid == ActiveJob.Machine.ConfigurationGuid); - //_activeJobDbContext.LiquidTypesRmls.ToList(); + //_activeJobDbContext.LiquidTypesRmls.ToList(); - //_activeJobDbContext.IdsPackFormulas.ToList(); - //_activeJobDbContext.LiquidTypes.ToList(); - //_activeJobDbContext.MidTankTypes.ToList(); - //_activeJobDbContext.DispenserTypes.ToList(); + //_activeJobDbContext.IdsPackFormulas.ToList(); + //_activeJobDbContext.LiquidTypes.ToList(); + //_activeJobDbContext.MidTankTypes.ToList(); + //_activeJobDbContext.DispenserTypes.ToList(); - //_activeJobDbContext.IdsPacks.Where(x => x.ConfigurationGuid == ActiveJob.Machine.ConfigurationGuid).ToList(); + //_activeJobDbContext.IdsPacks.Where(x => x.ConfigurationGuid == ActiveJob.Machine.ConfigurationGuid).ToList(); - _beforeSaveJobDTO = JobDTO.FromObservable(ActiveJob); + _beforeSaveJobDTO = JobDTO.FromObservable(ActiveJob); - LogManager.Log("Setting selected segment..."); - _selectedSegment = ActiveJob.OrderedSegments.FirstOrDefault(); + LogManager.Log("Setting selected segment..."); + _selectedSegment = ActiveJob.OrderedSegments.FirstOrDefault(); - ActiveJob.LengthChanged -= ActiveJob_LengthChanged; - ActiveJob.LengthChanged += ActiveJob_LengthChanged; + ActiveJob.LengthChanged -= ActiveJob_LengthChanged; + ActiveJob.LengthChanged += ActiveJob_LengthChanged; - _selectedRML = ActiveJob.Rml; - InvalidateLiquidFactorsAndProcessTables(); - RaisePropertyChanged(nameof(SelectedRML)); + _selectedRML = ActiveJob.Rml; + InvalidateLiquidFactorsAndProcessTables(); + RaisePropertyChanged(nameof(SelectedRML)); - UpdateEstimatedDuration(); + UpdateEstimatedDuration(); - _blockInvalidateCommands = false; - InvalidateRelayCommands(); + _blockInvalidateCommands = false; + InvalidateRelayCommands(); - _disable_gamut_check = false; + _disable_gamut_check = false; - _settings.LastSelectedMachineGuid = SelectedMachine != null ? SelectedMachine.Guid : null; - _settings.LastSelectedJobGuid = SelectedMachineJob != null ? SelectedMachineJob.Guid : null; + _settings.LastSelectedMachineGuid = SelectedMachine != null ? SelectedMachine.Guid : null; + _settings.LastSelectedJobGuid = SelectedMachineJob != null ? SelectedMachineJob.Guid : null; - _settings.Save(); - }); + _settings.Save(); + }); - SegmentsCollectionView = CollectionViewSource.GetDefaultView(ActiveJob.Segments); - SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Segment.SegmentIndex), ListSortDirection.Ascending)); + SegmentsCollectionView = CollectionViewSource.GetDefaultView(ActiveJob.Segments); + SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Segment.SegmentIndex), ListSortDirection.Ascending)); - foreach (var segment in ActiveJob.Segments) - { - SetSegmentBrushStopsLiquidVolumes(segment); - } + foreach (var segment in ActiveJob.Segments) + { + SetSegmentBrushStopsLiquidVolumes(segment); + } - SelectedSegment = _selectedSegment; + SelectedSegment = _selectedSegment; + + if (ActiveJob != null) + { + _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); + } - if (ActiveJob != null) + UIHelper.DoEvents(); + _navigation.NavigateTo(DeveloperNavigationView.JobView); + } + catch (Exception ex) { - _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); + LogManager.Log(ex, "Error loading job."); + _notification.ShowError($"An error occurred while trying to load the selected job.\n{ex.FlattenMessage()}"); + } + finally + { + CanWork = true; } - - UIHelper.DoEvents(); - _navigation.NavigateTo(DeveloperNavigationView.JobView); } CanWork = true; diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj new file mode 100644 index 000000000..0ef643858 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj @@ -0,0 +1,184 @@ + + + + + Debug + AnyCPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE} + library + Tango.MachineStudio.HardwareDesigner + Tango.MachineStudio.HardwareDesigner + v4.6.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + true + full + false + ..\..\..\Build\Machine Studio\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\..\Build\Machine Studio\Release\ + TRACE + prompt + 4 + + + + + + GlobalVersionInfo.cs + + + + + + + + + + + ComparisonWizardView.xaml + + + + MainView.xaml + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + {f441feee-322a-4943-b566-110e12fd3b72} + Tango.BL + + + {a34ee0f0-649d-41c8-8489-b6f1cc6924ee} + Tango.Core + + + {58e8825f-0c96-449c-b320-1e82b0aa876b} + Tango.CSV + + + {b112d89a-a106-41ae-a0c1-4abc84c477f5} + Tango.DragAndDrop + + + {4206ac58-3b57-4699-8835-90bf6db01a61} + Tango.Integration + + + {bc932dbd-7cdb-488c-99e4-f02cf441f55e} + Tango.Logging + + + {d8f1ad85-526a-4f50-b6dc-d437af63d8d8} + Tango.Settings + + + {8491d07b-c1f6-4b62-a412-41b9fd2d6538} + Tango.SharedUI + + + {cb0b0aa2-bb24-4bca-a720-45e397684e12} + Tango.MachineStudio.Common + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs index 542aba0e4..b6c028137 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs @@ -59,7 +59,7 @@ namespace Tango.BL.ActionLogs foreach (var prop in GetProperties(before, after).OrderByDescending(x => x.PropertyType.IsPrimitive || x.PropertyType.IsValueType || x.PropertyType == typeof(String))) { - if (GetShouldIgnore(prop, before, after)) continue; + if (prop.PropertyType == typeof(byte[]) || GetShouldIgnore(prop, before, after)) continue; if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) { diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs index d95f4cd54..b8f427e3a 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs @@ -160,7 +160,7 @@ namespace Tango.BL.ActionLogs } /// - /// Inserts a new action log (deletion entry). + /// Inserts a new action log (deletion/creation entry). /// /// The type. /// The user. @@ -181,7 +181,7 @@ namespace Tango.BL.ActionLogs } /// - /// Inserts a new action log (nutral entry). + /// Inserts a new action log (creation entry). /// /// The type. /// The user unique identifier. diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs index 6fdca98a7..e1fdbc4ec 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs @@ -58,7 +58,7 @@ namespace Tango.BL.ActionLogs void InsertLog(ActionLogType type, User user, String relatedObjectName, IActionLogComparable relatedObjectBefore, IActionLogComparable relatedObjectAfter, String message = null); /// - /// Inserts a new action log (deletion entry). + /// Inserts a new action log (deletion/creation entry). /// /// The type. /// The user. @@ -69,7 +69,7 @@ namespace Tango.BL.ActionLogs void InsertLog(ActionLogType type, User user, String relatedObjectName, IActionLogComparable relatedObject, String message = null, bool serializeRelatedObject = false); /// - /// Inserts a new action log (nutral entry). + /// Inserts a new action log (creation entry). /// /// The type. /// The user unique identifier. diff --git a/Software/Visual_Studio/Tango.BL/Builders/ActionLogsCollectionBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/ActionLogsCollectionBuilder.cs new file mode 100644 index 000000000..fecc0c662 --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/Builders/ActionLogsCollectionBuilder.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.Entities; +using System.Data.Entity; + +namespace Tango.BL.Builders +{ + public class ActionLogsCollectionBuilder : EntityCollectionBuilderBase + { + public ActionLogsCollectionBuilder(ObservablesContext context) : base(context) + { + + } + + public virtual ActionLogsCollectionBuilder WithUsers() + { + return AddQueryStep(1, (query) => + { + return query.Include(x => x.User).Include(x => x.User != null ? x.User.Contact : null); + }); + } + } +} diff --git a/Software/Visual_Studio/Tango.BL/DTO/CatDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/CatDTOBase.cs index 31de24ec0..20d534950 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/CatDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/CatDTOBase.cs @@ -53,5 +53,13 @@ namespace Tango.BL.DTO get; set; } + /// + /// data + /// + public Byte[] Data + { + get; set; + } + } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/CctDTO.cs b/Software/Visual_Studio/Tango.BL/DTO/CctDTO.cs index 96fc02a9e..65cf781f8 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/CctDTO.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/CctDTO.cs @@ -9,6 +9,9 @@ namespace Tango.BL.DTO { public class CctDTO : CctDTOBase { - + protected override string OnGetActionLogName() + { + return $"CCT '{FileName}'"; + } } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/CctDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/CctDTOBase.cs index 1205a857e..5bfc59bb5 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/CctDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/CctDTOBase.cs @@ -45,5 +45,13 @@ namespace Tango.BL.DTO get; set; } + /// + /// data + /// + public Byte[] Data + { + get; set; + } + } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/ColorCatalogDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/ColorCatalogDTOBase.cs index 2643b1d29..bd829e18f 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/ColorCatalogDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/ColorCatalogDTOBase.cs @@ -53,5 +53,21 @@ namespace Tango.BL.DTO get; set; } + /// + /// logo + /// + public Byte[] Logo + { + get; set; + } + + /// + /// image + /// + public Byte[] Image + { + get; set; + } + } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/ColorSpaceDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/ColorSpaceDTOBase.cs index ddb367fc5..3a3fb4d14 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/ColorSpaceDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/ColorSpaceDTOBase.cs @@ -45,5 +45,13 @@ namespace Tango.BL.DTO get; set; } + /// + /// thumbnail + /// + public Byte[] Thumbnail + { + get; set; + } + } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/DispenserDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/DispenserDTOBase.cs index 16e19d78a..6146f01dd 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/DispenserDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/DispenserDTOBase.cs @@ -77,5 +77,13 @@ namespace Tango.BL.DTO get; set; } + /// + /// calibration data + /// + public Byte[] CalibrationData + { + get; set; + } + } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/JobDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/JobDTOBase.cs index 2960381fc..073d833f2 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/JobDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/JobDTOBase.cs @@ -146,6 +146,14 @@ namespace Tango.BL.DTO get; set; } + /// + /// embroidery file data + /// + public Byte[] EmbroideryFileData + { + get; set; + } + /// /// embroidery file name /// @@ -154,6 +162,14 @@ namespace Tango.BL.DTO get; set; } + /// + /// embroidery jpeg + /// + public Byte[] EmbroideryJpeg + { + get; set; + } + /// /// status /// diff --git a/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTOBase.cs index badbaf0bc..1133f7cc8 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTOBase.cs @@ -45,5 +45,13 @@ namespace Tango.BL.DTO get; set; } + /// + /// default cat data + /// + public Byte[] DefaultCatData + { + get; set; + } + } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTableDTO.cs b/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTableDTO.cs index 9959b2254..84da600a8 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTableDTO.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTableDTO.cs @@ -9,6 +9,9 @@ namespace Tango.BL.DTO { public class ProcessParametersTableDTO : ProcessParametersTableDTOBase { - + protected override string OnGetActionLogName() + { + return $"Process Table '{Name}'"; + } } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTablesGroupDTO.cs b/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTablesGroupDTO.cs index 8419055c7..2091e5e57 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTablesGroupDTO.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/ProcessParametersTablesGroupDTO.cs @@ -9,6 +9,16 @@ namespace Tango.BL.DTO { public class ProcessParametersTablesGroupDTO : ProcessParametersTablesGroupDTOBase { + public List ProcessParametersTables { get; set; } + public ProcessParametersTablesGroupDTO() + { + ProcessParametersTables = new List(); + } + + protected override string OnGetActionLogName() + { + return $"Process Group '{Name}'"; + } } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs b/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs index ef4950fda..4b9be724e 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs @@ -9,6 +9,16 @@ namespace Tango.BL.DTO { public class RmlDTO : RmlDTOBase { + public List ProcessParametersTablesGroups { get; set; } + public RmlDTO() + { + ProcessParametersTablesGroups = new List(); + } + + protected override string OnGetActionLogName() + { + return $"RML '{Name}'"; + } } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/RmlDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/RmlDTOBase.cs index 8ed757b8d..84f7890ea 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/RmlDTOBase.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/RmlDTOBase.cs @@ -205,6 +205,14 @@ namespace Tango.BL.DTO get; set; } + /// + /// thumbnail + /// + public Byte[] Thumbnail + { + get; set; + } + /// /// cct guid /// diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs b/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs index 720d6b9b7..ee8d2f40f 100644 --- a/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs +++ b/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs @@ -51,7 +51,7 @@ namespace Tango.BL var observableProp = typeof(T).GetProperty(prop.Name); if (observableProp != null) { - if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) + if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String) || prop.PropertyType == typeof(byte[])) { prop.SetValue(dto, observableProp.GetValue(observable)); } @@ -99,7 +99,7 @@ namespace Tango.BL var observableProp = typeof(T).GetProperty(prop.Name); if (observableProp != null) { - if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) + if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String) || prop.PropertyType == typeof(byte[])) { observableProp.SetValue(observable, prop.GetValue(this)); } @@ -174,7 +174,7 @@ namespace Tango.BL var observableProp = typeof(T).GetProperty(prop.Name); if (observableProp != null) { - if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) + if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String) || prop.PropertyType == typeof(byte[])) { var observableValue = observableProp.GetValue(observable); var dtoValue = prop.GetValue(this); diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj index f1bdf94ec..fb8ec84a3 100644 --- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj +++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj @@ -89,6 +89,7 @@ + diff --git a/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/ObservablesGenerator.cs b/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/ObservablesGenerator.cs index 3280f47f5..92eab0857 100644 --- a/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/ObservablesGenerator.cs +++ b/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/ObservablesGenerator.cs @@ -184,7 +184,7 @@ namespace Tango.DBObservablesGenerator.CLI } codeFile.Fields.Add(codeField); - if (field.PropertyType.IsPrimitive || field.PropertyType.IsValueType || field.PropertyType == typeof(String)) + if (field.PropertyType.IsPrimitive || field.PropertyType.IsValueType || field.PropertyType == typeof(String) || field.PropertyType == typeof(byte[])) { dtoCodeBase.Properties.Add(new Property() { -- cgit v1.3.1 From c9622210d44031d5019836e238ab2134af61b304 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 21:25:17 +0200 Subject: Added RML liquid factors to ActionLog comparison. Added liquid factors save and process parameters ActionLog to MS research module. --- .../Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs | 7 +++++++ Software/Visual_Studio/Tango.BL/DTO/LiquidTypeDTO.cs | 5 ++++- Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTO.cs | 5 +++++ Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs | 3 +++ 4 files changed, 19 insertions(+), 1 deletion(-) (limited to 'Software/Visual_Studio/MachineStudio') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs index bb8f117c3..8b235a13a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs @@ -90,6 +90,7 @@ namespace Tango.MachineStudio.Developer.ViewModels private string _current_job_string; private JobDTO _beforeSaveJobDTO; private IActionLogManager _actionLogManager; + private RmlDTO _selectedRMLBeforeLiquidFactorsSaves; #region Properties @@ -1598,8 +1599,12 @@ namespace Tango.MachineStudio.Developer.ViewModels { LogManager.Log(String.Format("Saving liquid factors for RML {0}...", SelectedRML.Name)); await SelectedRML.SaveAsync(_activeJobDbContext); + var rmlAfterChange = RmlDTO.FromObservable(SelectedRML); + _actionLogManager.InsertLog(ActionLogType.RmlSaved, AuthenticationProvider.CurrentUser, SelectedRML.Name, _selectedRMLBeforeLiquidFactorsSaves, rmlAfterChange, "RML liquid factors changed from Machine Studio Research module."); + _selectedRMLBeforeLiquidFactorsSaves = rmlAfterChange; LiquidTypesRmls = ActiveJob.Machine.Configuration.GetSupportedIdsPacks(SelectedRML).Select(x => x.LiquidType).SelectMany(x => x.LiquidTypesRmls).Where(x => x.Rml.Guid == SelectedRML.Guid).ToList(); + foreach (var segment in ActiveJob.Segments) { SetSegmentBrushStopsLiquidVolumes(segment); @@ -1629,6 +1634,8 @@ namespace Tango.MachineStudio.Developer.ViewModels _selectedRML = new RmlBuilder(_activeJobDbContext).Set(SelectedRML.Guid).WithAllParametersGroup().WithCAT(SelectedMachine.Guid).WithCCT().WithLiquidFactors().Build(); + _selectedRMLBeforeLiquidFactorsSaves = RmlDTO.FromObservable(_selectedRML); + if (_selectedRML.Cct == null) { InvokeUI(() => diff --git a/Software/Visual_Studio/Tango.BL/DTO/LiquidTypeDTO.cs b/Software/Visual_Studio/Tango.BL/DTO/LiquidTypeDTO.cs index cec4185fc..e00510433 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/LiquidTypeDTO.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/LiquidTypeDTO.cs @@ -9,6 +9,9 @@ namespace Tango.BL.DTO { public class LiquidTypeDTO : LiquidTypeDTOBase { - + protected override string OnGetActionLogName() + { + return $"Liquid Type '{Name}'"; + } } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTO.cs b/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTO.cs index 787a00391..2366b9727 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTO.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/LiquidTypesRmlDTO.cs @@ -9,6 +9,11 @@ namespace Tango.BL.DTO { public class LiquidTypesRmlDTO : LiquidTypesRmlDTOBase { + public LiquidTypeDTO LiquidType { get; set; } + protected override string OnGetActionLogName() + { + return this.LiquidType != null ? $"Liquid Factor '{LiquidType.Name}'" : $"Liquid Factor '{Guid}'"; + } } } diff --git a/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs b/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs index 4b9be724e..a221a760c 100644 --- a/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs +++ b/Software/Visual_Studio/Tango.BL/DTO/RmlDTO.cs @@ -11,9 +11,12 @@ namespace Tango.BL.DTO { public List ProcessParametersTablesGroups { get; set; } + public List LiquidTypesRmls { get; set; } + public RmlDTO() { ProcessParametersTablesGroups = new List(); + LiquidTypesRmls = new List(); } protected override string OnGetActionLogName() -- cgit v1.3.1 From 59a334d66d1538e351e714437fa6c10e8ad5a475 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 22:59:54 +0200 Subject: Added ActionLogs MS module. --- .../ActionLogsModule.cs | 62 +++++++++ .../Images/action_logs.jpg | Bin 0 -> 25603 bytes .../Properties/AssemblyInfo.cs | 19 +++ .../Properties/Resources.Designer.cs | 71 ++++++++++ .../Properties/Resources.resx | 117 ++++++++++++++++ .../Properties/Settings.Designer.cs | 30 ++++ .../Properties/Settings.settings | 7 + .../Tango.MachineStudio.ActionLogs.csproj | 154 +++++++++++++++++++++ .../ViewModelLocator.cs | 29 ++++ .../ViewModels/MainViewVM.cs | 18 +++ .../Views/MainView.xaml | 15 ++ .../Views/MainView.xaml.cs | 28 ++++ .../Tango.MachineStudio.ActionLogs/app.config | 85 ++++++++++++ .../Tango.MachineStudio.ActionLogs/packages.config | 9 ++ .../Tango.MachineStudio.UI.csproj | 6 +- Software/Visual_Studio/Tango.sln | 55 +++++++- 16 files changed, 698 insertions(+), 7 deletions(-) create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config (limited to 'Software/Visual_Studio/MachineStudio') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs new file mode 100644 index 000000000..3a9dcdfaa --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; +using Tango.BL.Enumerations; +using Tango.MachineStudio.Common; +using Tango.MachineStudio.ActionLogs.Views; +using Tango.SharedUI.Helpers; + +namespace Tango.MachineStudio.ActionLogs +{ + [StudioModule(21)] + public class ActionLogsModule : StudioModuleBase + { + public override string Name + { + get + { + return "Action Logs"; + } + } + + public override string Description + { + get + { + return "Monitor and track changes made to Twine's global datasets."; + } + } + + public override BitmapSource Image + { + get + { + return ResourceHelper.GetImageFromResources("Images/action_logs.jpg"); + } + } + + public override Type MainViewType + { + get + { + return typeof(MainView); + } + } + + public override Permissions Permission + { + get + { + return Permissions.RunMachineStudio; + } + } + + public override void Dispose() + { + + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg new file mode 100644 index 000000000..75f39c09c Binary files /dev/null and b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg differ diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..072265a74 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +[assembly: AssemblyTitle("Tango - Machine Studio Action Logs Module")] +[assembly: AssemblyVersion("1.0.0.1737")] + +[assembly: ComVisible(false)] + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs new file mode 100644 index 000000000..796a67686 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Tango.MachineStudio.ActionLogs.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.MachineStudio.ActionLogs.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs new file mode 100644 index 000000000..507ac539d --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Tango.MachineStudio.ActionLogs.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings new file mode 100644 index 000000000..033d7a5e9 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj new file mode 100644 index 000000000..1a5d06616 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj @@ -0,0 +1,154 @@ + + + + + Debug + AnyCPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315} + library + Tango.MachineStudio.ActionLogs + Tango.MachineStudio.ActionLogs + v4.6.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + true + full + false + ..\..\..\Build\Machine Studio\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\..\Build\Machine Studio\Release\ + TRACE + prompt + 4 + + + + ..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll + + + ..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll + + + ..\..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll + + + ..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll + + + ..\..\..\packages\MaterialDesignColors.1.1.2\lib\net45\MaterialDesignColors.dll + + + ..\..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll + + + ..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + + + + + + ..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\System.Windows.Interactivity.dll + + + + + + + + + 4.0 + + + + + + + + GlobalVersionInfo.cs + + + + + MainView.xaml + + + + Designer + MSBuild:Compile + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {f441feee-322a-4943-b566-110e12fd3b72} + Tango.BL + + + {a34ee0f0-649d-41c8-8489-b6f1cc6924ee} + Tango.Core + + + {4206ac58-3b57-4699-8835-90bf6db01a61} + Tango.Integration + + + {bc932dbd-7cdb-488c-99e4-f02cf441f55e} + Tango.Logging + + + {d8f1ad85-526a-4f50-b6dc-d437af63d8d8} + Tango.Settings + + + {8491D07B-C1F6-4B62-A412-41B9FD2D6538} + Tango.SharedUI + + + {74e700b0-1156-4126-be40-ee450d3c3026} + Tango.Transport + + + {cb0b0aa2-bb24-4bca-a720-45e397684e12} + Tango.MachineStudio.Common + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs new file mode 100644 index 000000000..29540fa86 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.DI; +using Tango.MachineStudio.ActionLogs.ViewModels; + +namespace Tango.MachineStudio.ActionLogs +{ + public static class ViewModelLocator + { + /// + /// Initializes a new instance of the ViewModelLocator class. + /// + static ViewModelLocator() + { + TangoIOC.Default.Register(); + } + + public static MainViewVM MainViewVM + { + get + { + return TangoIOC.Default.GetInstance(); + } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs new file mode 100644 index 000000000..48f243c1b --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs @@ -0,0 +1,18 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.MachineStudio.Common; + +namespace Tango.MachineStudio.ActionLogs.ViewModels +{ + public class MainViewVM : StudioViewModel + { + public override void OnApplicationReady() + { + + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml new file mode 100644 index 000000000..e6c200fbe --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml @@ -0,0 +1,15 @@ + + + Action Logs + + diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs new file mode 100644 index 000000000..e87e3e55a --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.MachineStudio.ActionLogs.Views +{ + /// + /// Interaction logic for MainView.xaml + /// + public partial class MainView : UserControl + { + public MainView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config new file mode 100644 index 000000000..7b82e5f7c --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config @@ -0,0 +1,85 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config new file mode 100644 index 000000000..e57143046 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj index 635d372c2..d5084d051 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj @@ -468,6 +468,10 @@ {f69da3a8-f823-461e-87cf-a9275abc0b15} Tango.MachineStudio.Dispensers + + {447ecb9f-f730-47d6-8df8-d232bf4a0315} + Tango.MachineStudio.ActionLogs + {7d0fce3c-9a37-439c-9f9f-b26cfd6a8a33} Tango.MachineStudio.Catalogs @@ -670,7 +674,7 @@ if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)Roslyn\" - + \ No newline at end of file diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln index bfdbb9c8a..05031dfd7 100644 --- a/Software/Visual_Studio/Tango.sln +++ b/Software/Visual_Studio/Tango.sln @@ -333,6 +333,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.PPC.Packages.CefInsta EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.Sites", "MachineStudio\Modules\Tango.MachineStudio.Sites\Tango.MachineStudio.Sites.csproj", "{18A27902-9881-4556-8163-F6DF2236A14D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.ActionLogs", "MachineStudio\Modules\Tango.MachineStudio.ActionLogs\Tango.MachineStudio.ActionLogs.csproj", "{447ECB9F-F730-47D6-8DF8-D232BF4A0315}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution AppVeyor|Any CPU = AppVeyor|Any CPU @@ -5945,6 +5947,46 @@ Global {18A27902-9881-4556-8163-F6DF2236A14D}.Release|x64.Build.0 = Release|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.Release|x86.ActiveCfg = Release|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.Release|x86.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|Any CPU.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x86.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x86.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|Any CPU.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x86.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x86.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|Any CPU.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|Any CPU.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x86.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -6056,14 +6098,15 @@ Global {F02EAA84-AD59-465B-99A2-4422C13BFB72} = {0048447D-1D94-4E60-9DAD-7349C777CB4E} {DF64460A-6617-4338-872A-DC43FD994C48} = {E728CBD9-1AF4-4814-A218-E4BD26E7EDEA} {18A27902-9881-4556-8163-F6DF2236A14D} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8} + {447ECB9F-F730-47D6-8DF8-D232BF4A0315} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6} - BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear - BuildVersion_UpdateAssemblyVersion = True - BuildVersion_UpdateFileVersion = False - BuildVersion_StartDate = 2000/1/1 - BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs BuildVersion_UseGlobalSettings = False + BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs + BuildVersion_StartDate = 2000/1/1 + BuildVersion_UpdateFileVersion = False + BuildVersion_UpdateAssemblyVersion = True + BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear + SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6} EndGlobalSection EndGlobal -- cgit v1.3.1