/// /// Copyright (c) 2021 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Linq; using System.Xml.Serialization; using Common; using Config.Entities; using SchematicDrawing; using TBF.Rig.Generic; namespace TBF.Rig.Dummy.FlowMeter { public class FlowMeterCfg : ComponentCfgBase, IComponentCfg, IParamsProvider, IDrawingItemWithMeasuredVal { public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(FlowMeterCfg) })[0]; public override XmlSerializer GetSerializer() { return Serializer; } public IComponentCfgCtrl GetControl(IList cmpntEntities) { var parents = cmpntEntities.Where(x => x.ClassName == "ControlBoard.Uni"); return new Configs.ParamsProvider.ComponentCfgCtrl(this, parents); } /// /// Serialized parameters /// public double NominalFlow; /// 0 Nominal flow in m3/h public string MsrdFormat { get; set; } /// 1 public Unit MsrdUnit { get; set; } /// 2 /// Schematic drawing info public Shape Shape { get; set; } public int X { get; set; } public int Y { get; set; } public Sz Sz { get; set; } public Orient Orient { get; set; } public bool Flip { get; set; } public int LblX { get; set; } public int LblY { get; set; } public Orient LblOrient { get; set; } public int MsrdX { get; set; } public int MsrdY { get; set; } public Orient MsrdOrient { get; set; } [XmlIgnore] public IList GNodes { get; set; } [XmlIgnore] public double MsrdValLimLo { get { return msrdValLimLo; } set { msrdValLimLo = value; } } [XmlIgnore] public double MsrdValLimHi { get { return msrdValLimHi; } set { msrdValLimHi = value; } } double msrdValLimLo = 0; double msrdValLimHi; [XmlIgnore] public bool IsOffline { get; set; } /// Private parameterless constructor invoked by all other (public) constructors FlowMeterCfg() { GNodes = new List(); } public FlowMeterCfg(string name, IComponentFactory factory) : this() { Factory = factory; Name = name; InitializeAll(); } public string ComponentName { get { return Name; } } public void InitializeAll() { Shape = Shape.FlowM; Sz = Sz.M; NominalFlow = 1; MsrdFormat = "{0:F3} m2/h"; MsrdUnit = Unit.m3ph; LblX = 38; MsrdX = 38; MsrdY = 22; } string[] paramNames = new string[] { "Nominal flow [m3/h]", /// 0 "Display format", /// 1 "Units of flow on a display", /// 2 }; public string ParamName(int i) { return paramNames[i]; } public int ParamsCount() { return paramNames.Length; } public ICollection ParamValues(int i) { switch (i) { case 2: return new string[] { "m3/h", "l/h" }; default: return null; } } public string ToString(int i) { switch (i) { case 0: return NominalFlow.ToString(); case 1: return MsrdFormat; case 2: return MsrdUnit.ToDescription(); default: return string.Format("{0} {1}[{2},{3}] NominalFlow={4}", Name, Shape, X, Y, NominalFlow); } } public CfgUpdateFlags UpdateParam(int i, string str) { switch (i) { case 0: NominalFlow = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; case 1: MsrdFormat = str; return CfgUpdateFlags.RestartRqrd; case 2: MsrdUnit = (str == "l/h") ? Unit.lph : Unit.m3ph; return CfgUpdateFlags.RestartRqrd; default: return CfgUpdateFlags.None; } } public bool ValidateParam(int i, string str, out string message) { message = string.Empty; double dummy; switch (i) { case 0: if (TBF.Utils.TryParseUDouble(str, out dummy)) return true; break; case 1: return true; case 2: if (ParamValues(i).Contains(str)) return true; break; default: message = "Invalid index"; return false; } message = ParamName(i) + " is invalid"; return false; } void CopyContentTo(FlowMeterCfg prms) { prms.NominalFlow = NominalFlow; prms.MsrdFormat = MsrdFormat; prms.MsrdUnit = MsrdUnit; } public IParamsProvider Clone() { FlowMeterCfg pars = new FlowMeterCfg(); CopyContentTo(pars); return pars; } public bool UpdateEmbeddedDbEntity() { return true; /// =OK, do nothing } } }