using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace FurnaceUI.Views.Scheduled { public class ScheduledSCValue { protected Dictionary> _fieldMap = new Dictionary>(); public ScheduledSCValue() { } public List GetKeys() { return _fieldMap.Keys.ToList(); } public void AddKey(string key) { PropertyInfo[] property = typeof(ScheduledSCValue).GetProperties(); foreach (PropertyInfo fiGroup in property) { object objGroup = fiGroup.GetValue(this, null); foreach (PropertyInfo fiItem in objGroup.GetType().GetProperties()) { string name = String.Format("{0}_{1}", fiGroup.Name, fiItem.Name); if (key == name) { _fieldMap[name] = Tuple.Create(objGroup, fiItem); return; } } } } public virtual void SetKeys() { } public void SetKeys(Type type, string prefix, object objParent) { Dictionary items = new Dictionary(); PropertyInfo[] property = type.GetProperties(); foreach (PropertyInfo fiGroup in property) { var ttt = fiGroup.PropertyType; object obj = null; if (objParent != null) obj = fiGroup.GetValue(objParent, null); if (ttt != typeof(double) && ttt != typeof(string) && ttt != typeof(bool) && ttt != typeof(int)) { string fiGroupName = fiGroup.Name; SetKeys(ttt, prefix + fiGroupName + "_", obj); continue; } string name = $"{prefix}{fiGroup.Name}".Replace("_", "."); if (_fieldMap.Keys.Contains(name)) { _fieldMap[name] = Tuple.Create(objParent, fiGroup); } else { _fieldMap.Add(name, Tuple.Create(objParent, fiGroup)); } } } public virtual Dictionary GetScValue(string type, string filter) { Dictionary result = new Dictionary(); foreach (var tuple in _fieldMap) { if (tuple.Key.Contains(filter)) { result.Add(tuple.Key, tuple.Value.Item2.GetValue(tuple.Value.Item1).ToString()); } } return result; } public virtual void SetParameterValue(MECF.Framework.Common.Utilities.Parameter parameter) { } public void RetrieveAll() { SetKeys(); } public void Update(Dictionary result) { if (result == null) return; foreach (KeyValuePair item in result) { if (_fieldMap.ContainsKey(item.Key)) { Update(item.Key, item.Value.ToString()); //_fieldMap[item.Key].Item2.SetValue(_fieldMap[item.Key].Item1, item.Value, null); } } } public void Update(string key, string value) { if (!_fieldMap.ContainsKey(key)) return; if (_fieldMap[key].Item1 == null) return; try { if (_fieldMap[key].Item2.PropertyType == typeof(double)) { _fieldMap[key].Item2.SetValue(_fieldMap[key].Item1, Convert.ToDouble(value)); } else if (_fieldMap[key].Item2.PropertyType == typeof(int)) { _fieldMap[key].Item2.SetValue(_fieldMap[key].Item1, Convert.ToInt32(value)); } else if (_fieldMap[key].Item2.PropertyType == typeof(string)) { _fieldMap[key].Item2.SetValue(_fieldMap[key].Item1, value); } else if (_fieldMap[key].Item2.PropertyType == typeof(bool)) { _fieldMap[key].Item2.SetValue(_fieldMap[key].Item1, Convert.ToBoolean(value)); } } catch (Exception ex) { } } public Dictionary GetValue() { Dictionary result = new Dictionary(); foreach (var item in _fieldMap) { result[item.Key] = item.Value.Item2.GetValue(item.Value.Item1, null); } return result; } } public class ScheduledSC : ScheduledSCValue { public ScheduledConfig System_SetUp { get; set; } public ScheduledSC() { System_SetUp = new ScheduledConfig(); } public class ScheduledConfig { public Carrier Carrier { get; set; } = new Carrier(); public Boat Boat { get; set; } = new Boat(); public Conditioning Conditioning { get; set; } = new Conditioning(); } public class Carrier { public Carrier_OutLineAndDetail SideDymmy { get; set; } public Carrier_OutLineAndDetail FillDymmy { get; set; } } public class Carrier_OutLineAndDetail { public Carrier_OutLines OutLine { get; set; } public Carrier_Details Detail { get; set; } } public class Carrier_OutLines { public OutLine No1 { get; set; } public OutLine No2 { get; set; } public OutLine No3 { get; set; } public OutLine No4 { get; set; } } public class Carrier_Details { public Detail No1 { get; set; } public Detail No2 { get; set; } public Detail No3 { get; set; } public Detail No4 { get; set; } } public class Boat { public Boat_OutLines OutLine { get; set; } public Boat_Details Detail { get; set; } } public class Boat_OutLines { public OutLine No1 { get; set; } public OutLine No2 { get; set; } public OutLine No3 { get; set; } public OutLine No4 { get; set; } public OutLine No5 { get; set; } } public class Boat_Details { public Detail No1 { get; set; } public Detail No2 { get; set; } public Detail No3 { get; set; } public Detail No4 { get; set; } public Detail No5 { get; set; } } public class Conditioning { public Conditioning_OutLines OutLine { get; set; } public Conditioning_Details Detail { get; set; } } public class Conditioning_OutLines { public OutLine No1 { get; set; } public OutLine No2 { get; set; } } public class Conditioning_Details { public Detail No1 { get; set; } public Detail No2 { get; set; } } public class Reactor { public Recipe_OutLineAndDetail Recipe { get; set; } public StepRunFreq_OutLineAndDetail StepRunFreq { get; set; } public StepRunTime_OutLineAndDetail StepRunTime { get; set; } public StepThickness_OutLineAndDetail StepThickness { get; set; } } public class Recipe_OutLineAndDetail { public Recipe_OutLines OutLine { get; set; } public Recipe_Details Detail { get; set; } } public class Recipe_OutLines { public OutLine No1 { get; set; } public OutLine No2 { get; set; } } public class Recipe_Details { public Detail No1 { get; set; } public Detail No2 { get; set; } } public class StepRunFreq_OutLineAndDetail { public StepRunFreq_OutLines OutLine { get; set; } public StepRunFreq_Details Detail { get; set; } } public class StepRunFreq_OutLines { public OutLine No1 { get; set; } public OutLine No2 { get; set; } public OutLine No3 { get; set; } } public class StepRunFreq_Details { public Detail No1 { get; set; } public Detail No2 { get; set; } public Detail No3 { get; set; } } public class StepRunTime_OutLineAndDetail { public StepRunTime_OutLines OutLine { get; set; } public StepRunTime_Details Detail { get; set; } } public class StepRunTime_OutLines { public OutLine No1 { get; set; } public OutLine No2 { get; set; } public OutLine No3 { get; set; } public OutLine No4 { get; set; } public OutLine No5 { get; set; } public OutLine No6 { get; set; } public OutLine No7 { get; set; } public OutLine No8 { get; set; } public OutLine No9 { get; set; } public OutLine No10 { get; set; } } public class StepRunTime_Details { public Detail No1 { get; set; } public Detail No2 { get; set; } public Detail No3 { get; set; } public Detail No4 { get; set; } public Detail No5 { get; set; } public Detail No6 { get; set; } public Detail No7 { get; set; } public Detail No8 { get; set; } public Detail No9 { get; set; } public Detail No10 { get; set; } } public class StepThickness_OutLineAndDetail { public StepThickness_OutLines OutLine { get; set; } public StepThickness_Details Detail { get; set; } } public class StepThickness_OutLines { public OutLine No1 { get; set; } public OutLine No2 { get; set; } public OutLine No3 { get; set; } public OutLine No4 { get; set; } public OutLine No5 { get; set; } public OutLine No6 { get; set; } public OutLine No7 { get; set; } public OutLine No8 { get; set; } public OutLine No9 { get; set; } public OutLine No10 { get; set; } } public class StepThickness_Details { public Detail No1 { get; set; } public Detail No2 { get; set; } public Detail No3 { get; set; } public Detail No4 { get; set; } public Detail No5 { get; set; } public Detail No6 { get; set; } public Detail No7 { get; set; } public Detail No8 { get; set; } public Detail No9 { get; set; } public Detail No10 { get; set; } } public override void SetKeys() { _fieldMap.Clear(); SetKeys(typeof(ScheduledSC), "", this); } public void SetKeys(Type type, string prefix, object objParent) { Dictionary items = new Dictionary(); PropertyInfo[] property = type.GetProperties(); foreach (PropertyInfo fiGroup in property) { var ttt = fiGroup.PropertyType; object obj = null; if (objParent != null) obj = fiGroup.GetValue(objParent, null); if (ttt != typeof(double) && ttt != typeof(string) && ttt != typeof(bool) && ttt != typeof(int) && ttt != typeof(DateTime)) { string fiGroupName = fiGroup.Name; SetKeys(ttt, prefix + fiGroupName + "_", obj); continue; } string name = $"{prefix}{fiGroup.Name}".Replace("_", "."); if (_fieldMap.Keys.Contains(name)) { _fieldMap[name] = Tuple.Create(objParent, fiGroup); } else { _fieldMap.Add(name, Tuple.Create(objParent, fiGroup)); } } } } public class OutLine { private int _no; public int No { get => _no; set { _no = value; } } private string _maintenanceName; public string MaintenanceName { get => _maintenanceName; set { _maintenanceName = value; } } private string _maintenanceItem; public string MaintenanceItem { get => _maintenanceItem; set { _maintenanceItem = value; } } private double _currentValue; public double CurrentValue { get => _currentValue; set { _currentValue = value; } } private double _schedulingStartValue; public double SchedulingStartValue { get => _schedulingStartValue; set { _schedulingStartValue = value; } } private double _maintenanceLimitValue; public double MaintenanceLimitValue { get => _maintenanceLimitValue; set { _maintenanceLimitValue = value; } } private string _unit; public string Unit { get => _unit; set { _unit = value; } } private string _maintenanceProcessing; public string MaintenanceProcessing { get => _maintenanceProcessing; set { _maintenanceProcessing = value; } } } public class Detail { private int _no; public int No { get => _no; set { _no = value; } } private string _maintenanceName; public string MaintenanceName { get => _maintenanceName; set { _maintenanceName = value; } } private string _maintenanceJobName; public string MaintenanceJobName { get => _maintenanceJobName; set { _maintenanceJobName = value; } } private string _maintenanceItem; public string MaintenanceItem { get => _maintenanceItem; set { _maintenanceItem = value; } } private string _status; public string Status { get => _status; set { _status = value; } } private double _currentValue; public double CurrentValue { get => _currentValue; set { _currentValue = value; } } private double _schedulingStartValue; public double SchedulingStartValue { get => _schedulingStartValue; set { _schedulingStartValue = value; } } private double _maintenanceLimitValue; public double MaintenanceLimitValue { get => _maintenanceLimitValue; set { _maintenanceLimitValue = value; } } private string _unit; public string Unit { get => _unit; set { _unit = value; } } private string _maintenanceProcessing; public string MaintenanceProcessing { get => _maintenanceProcessing; set { _maintenanceProcessing = value; } } private DateTime _maintenanceExecutionDate; public DateTime MaintenanceExecutionDate { get => _maintenanceExecutionDate; set { _maintenanceExecutionDate = value; } } } }