using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.Core; namespace Tango.BL.ValueObjects { public class HardwareConfiguration { public class HardwareConfigurationParameter { public String ComponentName { get; set; } public String ParameterName { get; set; } public Object Value { get; set; } public override string ToString() { return $"{ParameterName}: {Value}"; } } public List Parameters { get; set; } public HardwareConfiguration() { Parameters = new List(); } public HardwareVersion Merge(HardwareVersion hw) { return Merge(this, hw); } public static HardwareVersion Merge(HardwareConfiguration config, HardwareVersion hw) { var cloned = hw.Clone(); MergeCollection(config, cloned.HardwareMotors, (x) => x.HardwareMotorType.Name); MergeCollection(config, cloned.HardwareBlowers, (x) => x.HardwareBlowerType.Name); MergeCollection(config, cloned.HardwareBreakSensors, (x) => x.HardwareBreakSensorType.Name); MergeCollection(config, cloned.HardwareDancers, (x) => x.HardwareDancerType.Name); MergeCollection(config, cloned.HardwarePidControls, (x) => x.HardwarePidControlType.Name); MergeCollection(config, cloned.HardwareSpeedSensors, (x) => x.HardwareSpeedSensorType.Name); MergeCollection(config, cloned.HardwareWinders, (x) => x.HardwareWinderType.Name); return cloned; } private static void MergeCollection(HardwareConfiguration config, SynchronizedObservableCollection collection, Func funcProp) { foreach (var component in collection) { foreach (var param in config.Parameters) { if (param.ComponentName == funcProp(component)) { var prop = component.GetType().GetProperty(param.ParameterName); if (prop != null && param.Value != null) { prop.SetValue(component, Convert.ChangeType(param.Value, prop.PropertyType)); } } } } } public String ToJson() { return JsonConvert.SerializeObject(this); } public static HardwareConfiguration FromJson(String json) { if (json != null) { return JsonConvert.DeserializeObject(json); } else { return new HardwareConfiguration(); } } } }