using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Tango.Core.ExtensionMethods; namespace Tango.FSE.Diagnostics.Project { public class DiagnosticsUserSettingsCollection { private static JsonSerializerSettings _settings; public List Widgets { get; set; } public T GetWidgetSettings(DiagnosticsConfigurableWidget widget) where T : DiagnosticsWidgetSettings { return GetWidgetSettings(widget) as T; } public DiagnosticsWidgetSettings GetWidgetSettings(DiagnosticsConfigurableWidget widget) { var record = Widgets.FirstOrDefault(x => x.WidgetID == widget.ID); if (record != null) { return record.Settings; } return null; } public void ApplyWidgetSettings(DiagnosticsConfigurableWidget widget) { var record = Widgets.FirstOrDefault(x => x.WidgetID == widget.ID); if (record != null) { if (widget.Settings == null) { widget.Settings = record.Settings; } else { record.Settings.MapPropertiesTo(widget.Settings, MappingFlags.All, (prop) => prop.GetCustomAttribute() == null); } } } public void SetWidgetSettings(DiagnosticsConfigurableWidget widget) { var record = Widgets.FirstOrDefault(x => x.WidgetID == widget.ID); if (record == null) { record = new DiagnosticsUserWidgetSettings() { WidgetID = widget.ID, }; Widgets.Add(record); } record.Settings = widget.Settings; } static DiagnosticsUserSettingsCollection() { _settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto, Formatting = Formatting.Indented }; } public DiagnosticsUserSettingsCollection() { Widgets = new List(); } public String ToJson() { return JsonConvert.SerializeObject(this, _settings); } public static DiagnosticsUserSettingsCollection FromJson(String json) { return JsonConvert.DeserializeObject(json, _settings); } public void ToFile(String fileName) { File.WriteAllText(fileName, ToJson()); } public static DiagnosticsUserSettingsCollection FromFile(String fileName) { return FromJson(File.ReadAllText(fileName)); } } }