123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using InABox.Core;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.CodeAnalysis;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace InABox.Wpf.Dashboard;
- public class DynamicDashboard
- {
- public DynamicDashboardDataComponent DataComponent { get; set; } = new();
- [JsonIgnore]
- public IDynamicDashboardDataPresenter? DataPresenter { get; set; }
- #region Serialization
- private string _presenterProperties = "";
- [JsonProperty(Order = 1, PropertyName = "PresenterProperties")]
- private string PresenterProperties
- {
- get => DataPresenter is not null ? Serialization.Serialize(DataPresenter.Properties) : "";
- set
- {
- _presenterProperties = value;
- }
- }
- [JsonProperty(Order = 2, PropertyName = "PresenterType")]
- private Type? PresenterType
- {
- get => DataPresenter?.GetType();
- set
- {
- if(value is null)
- {
- DataPresenter = null;
- }
- else
- {
- DataPresenter = Activator.CreateInstance(value) as IDynamicDashboardDataPresenter;
- var propertiesType = value.GetInterfaceDefinition(typeof(IDynamicDashboardDataPresenter<>))!.GenericTypeArguments[0];
- DataPresenter!.Properties = Serialization.Deserialize(propertiesType, _presenterProperties)
- ?? Activator.CreateInstance(propertiesType)!;
- }
- }
- }
- #endregion
- }
- public static class DynamicDashboardUtils
- {
- private static Type[]? _presenterTypes;
- private static bool _loaded;
- [MemberNotNull(nameof(_presenterTypes))]
- private static void LoadTypes()
- {
- if(!_loaded)
- {
- var presenters = new List<Type>();
- var presenterEditors = new Dictionary<Type, Type>();
- foreach(var entity in CoreUtils.Entities)
- {
- if (entity.HasInterface<IDynamicDashboardDataPresenter>())
- {
- presenters.Add(entity);
- }
- }
- _presenterTypes = presenters.ToArray();
- _loaded = true;
- }
- }
- public static IEnumerable<Type> GetPresenterTypes()
- {
- LoadTypes();
- return _presenterTypes;
- }
- private static JsonSerializerSettings SerializationSettings()
- {
- var settings = Serialization.CreateSerializerSettings();
- settings.TypeNameHandling = TypeNameHandling.Auto;
- return settings;
- }
- public static string Serialize(DynamicDashboard data)
- {
- return JsonConvert.SerializeObject(data, typeof(DynamicDashboard), SerializationSettings());
- }
- public static DynamicDashboard? Deserialize(string? json)
- {
- if (json.IsNullOrWhiteSpace()) return null;
- return JsonConvert.DeserializeObject<DynamicDashboard>(json, SerializationSettings())!;
- }
- }
|