/// /// Copyright (c) 2018-2021 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Xml.Serialization; using Common; using Config.Entities; using TBF.BenchControl.Generic; using TBF.Resources; namespace TBF.BenchControl.DataContainers.BenchInfo.iPerl { /// /// Holds information identifying the test bench - serializable configuration. /// public class ComponentCfg : ComponentCfgBase, Generic.IComponentCfg, Config.Entities.IParamsProvider, TBF.BenchControl.GenericDevices.ICalibInfoCfg { public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ComponentCfg) })[0]; public override XmlSerializer GetSerializer() { return Serializer; } public IComponentCfgCtrl GetControl(IList cmpntEntities) { return new Configs.ParamsProvider.ComponentCfgCtrl(this, null); } /// /// Serialized parameters /// public string TestBenchName; public int TestBenchId; public string Address1; public string Address2; public string Address3; public string Address4; public string Address5; public string ApprovalId; public string ApprovalDate; public string ApprovedBy; public RemoteDBUse RemoteDBUse; public Side Side; public int MaxTestIndex; /// (MaxPruefindex % 100) value when to reject water meters completely if they are NOK /// Calibration info serialized parameters displayed in Metrology tab page public string CalibCertificateNr { get; set; } public DateTime CalibDate { get; set; } public DateTime CalibValidDate { get; set; } /// Private parameterless constructor invoked by all other (public) constructors ComponentCfg() {} public ComponentCfg(string name, IComponentFactory factory) : this() { Factory = factory; Name = name; ParentName = string.Empty; InitializeAll(); } public string ComponentName { get { return Name; } } public void InitializeAll() { TestBenchName = "1"; TestBenchId = 1; Address1 = string.Empty; Address2 = string.Empty; Address3 = string.Empty; Address4 = string.Empty; Address5 = string.Empty; ApprovalId = string.Empty; ApprovalDate = string.Empty; ApprovedBy = string.Empty; RemoteDBUse = RemoteDBUse.LocalDBOnly; Side = Side.Left; MaxTestIndex = 4; CalibCertificateNr = string.Empty; CalibDate = TBF.UI.Constants.MinDate; CalibValidDate = TBF.UI.Constants.MaxDate; } string[] paramNames = new string[] { "Test bench name", "Test bench ID", "Address 1", "Address 2", "Address 3", "Address 4", "Address 5", "Approval", "Approval date", "Approved by", "Remote DB use", Strings.Side, "Max.test index", }; public string ParamName(int i) { return paramNames[i]; } public int ParamsCount() { return paramNames.Length; } public ICollection ParamValues(int i) { if (i == 10) { IList list = new List(); for (RemoteDBUse rdbu = 0; rdbu < RemoteDBUse.Count; rdbu++) list.Add(rdbu.ToDescription()); return list; } else if (i == 11) { IList list = new List(); for (Side side = 0; side < Side.Count; side++) list.Add(side.ToDescription()); return list; } else { return null; } } public string ToString(int i) { if (i == -1) { return string.Format("{0}: Bench name={1}, Bench Id={2}, Procedures={3}", Name, TestBenchName, TestBenchId, RemoteDBUse.ToDescription()); } switch (i) { case 0: return TestBenchName; case 1: return TestBenchId.ToString(); case 2: return Address1; case 3: return Address2; case 4: return Address3; case 5: return Address4; case 6: return Address5; case 7: return ApprovalId; case 8: return ApprovalDate; case 9: return ApprovedBy; case 10: return RemoteDBUse.ToDescription(); case 11: return Side.ToDescription(); case 12: return MaxTestIndex.ToString(); default: return string.Empty; } } public CfgUpdateFlags UpdateParam(int i, string strValue) { switch (i) { case 0: TestBenchName = strValue; return CfgUpdateFlags.RestartRqrd; case 1: TestBenchId = int.Parse(strValue); return CfgUpdateFlags.RestartRqrd; case 2: Address1 = strValue; return CfgUpdateFlags.RestartRqrd; case 3: Address2 = strValue; return CfgUpdateFlags.RestartRqrd; case 4: Address3 = strValue; return CfgUpdateFlags.RestartRqrd; case 5: Address4 = strValue; return CfgUpdateFlags.RestartRqrd; case 6: Address5 = strValue; return CfgUpdateFlags.RestartRqrd; case 7: ApprovalId = strValue; return CfgUpdateFlags.RestartRqrd; case 8: ApprovalDate = strValue; return CfgUpdateFlags.RestartRqrd; case 9: ApprovedBy = strValue; return CfgUpdateFlags.RestartRqrd; case 10: for (RemoteDBUse rdbu = 0; rdbu < RemoteDBUse.Count; rdbu++) { if (strValue == rdbu.ToDescription()) { if (RemoteDBUse != rdbu) { RemoteDBUse = rdbu; return CfgUpdateFlags.RestartRqrd; } else { return CfgUpdateFlags.None; } } } return CfgUpdateFlags.Error; case 11: for (Side side = 0; side < Side.Count; side++) { if (strValue == side.ToDescription()) { if (Side != side) { Side = side; return CfgUpdateFlags.RestartRqrd; } else { return CfgUpdateFlags.None; } } } return CfgUpdateFlags.Error; case 12: MaxTestIndex = int.Parse(strValue); return CfgUpdateFlags.RestartRqrd; default: return CfgUpdateFlags.None; } } public bool ValidateParam(int i, string strValue, out string message) { message = string.Empty; int idummy; switch (i) { case 0: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: return true; case 1: case 12: if (int.TryParse(strValue, out idummy) && (idummy >= 0)) return true; break; case 10: for (RemoteDBUse rdbu = 0; rdbu < RemoteDBUse.Count; rdbu++) { if (strValue == rdbu.ToDescription()) return true; } break; case 11: for (Side side = 0; side < Side.Count; side++) { if (strValue == side.ToDescription()) return true; } break; default: message = "Invalid index"; return false; } message = ParamName(i) + " is invalid"; return false; } void CopyContentTo(ComponentCfg prms) { prms.TestBenchName = this.TestBenchName; prms.TestBenchId = this.TestBenchId; prms.Address1 = this.Address1; prms.Address2 = this.Address2; prms.Address3 = this.Address3; prms.Address4 = this.Address4; prms.Address5 = this.Address5; prms.ApprovalId = this.ApprovalId; prms.ApprovalDate = this.ApprovalDate; prms.ApprovedBy = this.ApprovedBy; prms.RemoteDBUse = this.RemoteDBUse; prms.Side = this.Side; prms.MaxTestIndex = this.MaxTestIndex; } public Config.Entities.IParamsProvider Clone() { ComponentCfg pars = new ComponentCfg(); CopyContentTo(pars); return pars; } public bool UpdateEmbeddedDbEntity() { return true; /// =OK, do nothing } } }